我希望在散列中添加一个现有数组作为值。我知道你可以使用数组作为值,但是看不到分配现有数组的方法。我基本上想去:
$hash{fieldName} = @myArray;
只有这显然不起作用!帮助赞赏!
答案 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}}