Arrays 数组(0x7FF4B0C7B8)错误:数组的perl哈希
虽然我的代码运行时没有抛出致命错误,但输出显然是错误的。我首先创建数组的散列。然后根据散列中的键搜索文件中的序列。如果序列作为散列中的键存在,我将打印键和相关值。这应该足够简单,我正在正确地创建数组的散列。然而,当我打印相关的值时,我得到了“ARRAY(0x7ff4bbb0c7b8)” 文件“infle”是选项卡分隔的,如下所示,例如:Arrays 数组(0x7FF4B0C7B8)错误:数组的perl哈希,arrays,perl,hash,Arrays,Perl,Hash,虽然我的代码运行时没有抛出致命错误,但输出显然是错误的。我首先创建数组的散列。然后根据散列中的键搜索文件中的序列。如果序列作为散列中的键存在,我将打印键和相关值。这应该足够简单,我正在正确地创建数组的散列。然而,当我打印相关的值时,我得到了“ARRAY(0x7ff4bbb0c7b8)” 文件“infle”是选项卡分隔的,如下所示,例如: AAAAA AAAAA BBBBB BBBBB BBBBB 这是我的密码: use strict; use warnings;
AAAAA AAAAA
BBBBB BBBBB BBBBB
这是我的密码:
use strict;
use warnings;
open(INFILE, '<', '/path/to/file') or die $!;
my $count = 0;
my %hash = (
AAAAA => [ "QWERT", "YUIOP" ],
BBBBB => [ "ASDFG", "HJKL", "ZXCVB" ],
);
while (my $line = <INFILE>){
chomp $line;
my $hash;
my @elements = split "\t", $line;
my $number = grep exists $hash{$_}, @elements;
open my $out, '>', "/path/out/Cluster__Number$._$number.txt" or die $!;
foreach my $sequence(@elements){
if (exists ($hash{$sequence})){
print $out ">$sequence\n$hash{$sequence}\n";
}
else
{
$count++;
print "Key Doesn't Exist ", $count, "\n";
}
}
}
预期输出如下所示:
>AAAAA
QWERT
>AAAAA
YUIOP
非常感谢你的帮助 在这一行中:
print $out ">$sequence\n$hash{$sequence}\n";
…$hash{$sequence}
是对数组的引用。在打印引用的数组之前,必须取消引用该数组。下面是一个打印$sequence
的示例,然后在下一行打印$hash{$sequence}
数组的元素,元素之间用逗号分隔:
print $out ">$sequence\n";
print $out join ', ', @{ $hash{$sequence} };
这里的关键是使用散列所持有的arrayref,而不仅仅是试图打印它。不管怎样,您都希望从数组中删除第一项,您可以使用函数执行此操作。然后,您可以将该项添加到数组的末尾,也可以在没有更多项时从哈希中删除该项,具体取决于在所有键都使用一次时希望执行的操作。您还可以使用如下函数从数组中选择一个随机元素:
my $out_seq = $hash{$sequence}[rand $@{ $hash{$sequence} }];
如果希望项目在随机情况下用完,则需要从数组中删除该项目。最好的方法可能是使用(一般形式的shift
、和push
):
这是我的程序版本:
#!/usr/bin/perl
use strict;
use warnings;
use strict;
use warnings;
# open my $in, '<', '/path/to/file') or die $!;
my $in = \*DATA; #use internal data file instead for testing
my $count = 0;
my %hash = (
AAAAA => [ "QWERT", "YUIOP" ],
BBBBB => [ "ASDFG", "HJKL", "ZXCVB" ],
);
while (<$in>) {
chomp;
my $hash;
my @elements = split "\t";
my $number = grep exists $hash{$_}, @elements;
#open my $out, '>', "/path/out/Cluster__Number$._$number.txt" or die $!;
my $out = \*STDOUT; # likewise use STDOUT for testing
for my $sequence (@elements) {
if (exists $hash{$sequence}) {
my $out_seq = shift @{ $hash{$sequence} };
# if you want to repeat
push @{ $hash{$sequence} }, $out_seq;
# if you want to remove $sequence when they run out
# delete $hash{$sequence} unless @{ $hash{$sequence} };
print $out ">$sequence\n$out_seq\n";
} else {
warn "Key [$sequence] Doesn't Exist ", ++$count, "\n";
}
}
}
__DATA__
AAAAA AAAAA
CCCCC
BBBBB BBBBB BBBBB
#/usr/bin/perl
严格使用;
使用警告;
严格使用;
使用警告;
#打开我的$in、、“/path/out/Cluster\uuuuu Number$.\uu$Number.txt”或die$!;
我的$out=\*STDOUT;\同样,使用STDOUT进行测试
对于我的$sequence(@elements){
if(存在$hash{$sequence}){
my$out_seq=shift@{$hash{$sequence};
#如果你想重复
push@{$hash{$sequence}},$out\u seq;
#如果要在$sequence用完时删除它们
#删除$hash{$sequence},除非@{$hash{$sequence};
打印$out“>$sequence\n$out\u seq\n”;
}否则{
警告“键[$sequence]不存在”、++$count、“\n”;
}
}
}
__资料__
AAAAAAAAA
CCCCC
bbbbbbbbbbbbbbbbbbbb
@{$hash{$sequence}
谢谢Chas。欧文斯。回答得好。
my $out_seq = splice @{ $hash{$sequence} }, rand @{ $hash{$sequence} }, 1;
delete $hash{$sequence} unless @{ $hash{$sequence} };
#!/usr/bin/perl
use strict;
use warnings;
use strict;
use warnings;
# open my $in, '<', '/path/to/file') or die $!;
my $in = \*DATA; #use internal data file instead for testing
my $count = 0;
my %hash = (
AAAAA => [ "QWERT", "YUIOP" ],
BBBBB => [ "ASDFG", "HJKL", "ZXCVB" ],
);
while (<$in>) {
chomp;
my $hash;
my @elements = split "\t";
my $number = grep exists $hash{$_}, @elements;
#open my $out, '>', "/path/out/Cluster__Number$._$number.txt" or die $!;
my $out = \*STDOUT; # likewise use STDOUT for testing
for my $sequence (@elements) {
if (exists $hash{$sequence}) {
my $out_seq = shift @{ $hash{$sequence} };
# if you want to repeat
push @{ $hash{$sequence} }, $out_seq;
# if you want to remove $sequence when they run out
# delete $hash{$sequence} unless @{ $hash{$sequence} };
print $out ">$sequence\n$out_seq\n";
} else {
warn "Key [$sequence] Doesn't Exist ", ++$count, "\n";
}
}
}
__DATA__
AAAAA AAAAA
CCCCC
BBBBB BBBBB BBBBB