如何将现有数组用作Perl中哈希值?

时间:2009-10-03 14:42:54

标签: perl arrays hash

我希望在散列中添加一个现有数组作为值。我知道你可以使用数组作为值,但是看不到分配现有数组的方法。我基本上想去:

$hash{fieldName} = @myArray;

只有这显然不起作用!帮助赞赏!

4 个答案:

答案 0 :(得分:12)

您只能在散列/数组中存储标量值。你需要使用:

$hash{fieldName} = \@myArray;

存储它,并且:

my @myOtherArray = @{$hash{fieldName}};

让它回来。它通过使用对数组的引用来解决标量需求。

答案 1 :(得分:6)

由于没有人提及它,你的代码所做的如下:

  • 因为您分配了哈希的元素,所以赋值是在标量上下文中

  • 在标量上下文中,数组的值变为数组的大小

  • 因此,$hash{fieldName}的值等于数组的大小(scalar @myarray

答案 2 :(得分:5)

虽然正确的答案确实是存储引用,但有时候\@myArray[ @myArray ](浅副本)和dclone(深拷贝)之间的区别很重要。

如果您有,$hash{fieldName} = \@myArray,则$hash{fieldName}->[2]将修改@myArray的第三个元素。如果@myArray本身不包含任何引用,则存储浅表副本将帮助您避免该行为。

答案 3 :(得分:4)

您可以使用反斜杠运算符'\'存储对数组的引用,例如

$hash{fieldName} = \@myArray

然后您可以使用以下内容访问它:

@{$hash{fieldName}}