perl - Perl,数组的哈希: 在while循环,添加和移除关键点,添加到数组中,所有的键都将被添加到数组中

  显示原文与译文双语对照的内容
144 1

我有一个散列,它应该包含某些键,这些键链接到它们自己的数组。 更具体地说,哈希键是质量值,数组是序列名称。 如果已经存在该质量的array,我想将序列名添加到与质量质量相关的array 中。 如果没有,我想创建一个,并将序列名添加到它。 所有这些都是在一个while循环中完成的,通过一个循环遍历所有的序列。

Perl中,我尝试了如何从数组的哈希中检索 array? 但我似乎不正确。

我只是收到这些错误消息: 标量值 @{hash{$q} 最好在 asdasd.pl 行 69处写成 ${hash{$q} 。 全局符号"@q"要求显式软件包名称 asdasd.pl 行 58. 还有其他一些。

以下是我尝试的示例:


my %hash;


while (reading the sequences) {


 my $q ="the value the sequence has";


 my $seq ="the name of the sequence";



 if (exists $hash{$q}) {


 push (@{$hash{$q}}, $seq);


 } else {


 $hash{$q} = @q;


 $hash{$q} = [$seq];


 next;


 }


}



这显然不是一个非常复杂的问题,但我对perl是新的,这类问题很难解决。 我已经从不同的地方搜索过了,但似乎有些我不认识的东西,也很明显。

时间: 原作者:

55 0

你可以使用perl调用的autovivification 来实现这一点。 你的代码不需要中心语句。 你可以把它归结为:


 push @{ $hash{$q} }, $seq;



如果在哈希中尚未存在特定的密钥,perl将会 autoviv,因为它可以推断你希望在这里处引用 array 引用。

你可以在autovivification上找到更多的资源,。 它是一个独特的词,其中大部分的点击似乎是相关的。 :- )

原作者:
...