如何将数组解析为数组的散列?

How to parse an array to a hash of arrays?

我是初学者(湿实验室生物学家,我有生以来第一次 fiddle 接触生物信息学),今天我遇到了一个问题:如何解析perl 中数组到数组散列的数组?

这行不通:

@myhash{$key} = @mytable;

我终于用 for 循环解决了我的问题:

for(my $i=0;$i<=$#mytable;$i++){$myhash{$key}[$i]=$mytable[$i]};

当然它有效并且它完成了我需要做的事情,但在我看来它不是解决我的问题的方法,而是一种规避它的方法......当某些事情不起作用时我喜欢明白为什么...

非常感谢您的指教!

如果您询问如何将数组作为散列的一个值,您可以通过引用数组来实现,因为引用是标量,而散列的值必须是标量。这是通过反斜杠运算符完成的。

$myhash{$key} = \@mytable;

您描述的 for 循环通过自动生成创建了这样一个引用,因为 $myhash{$key}[0]$myhash{$key} 处创建了一个数组引用以便分配给它的索引。另请注意,引用和复制每个值之间的区别在于,在前一种情况下,事后对数组的更改也会影响通过哈希值引用的值,反之亦然。

$mytable[5] = 42; # $myhash{$key}[5] is also changed

正如 Grinnz 提到的,您可以保存对数组的引用,但数组后面的任何更改都将反映在散列中(它是相同的数据)。

例如,如果您在循环中重复使用同一个数组,则散列中的数据将反映循环的最后一次迭代。

在这种情况下,您需要存储在哈希中的数组副本。

@{$hash{$key}} = @array;

Programming Perl: Data strutures