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

tsv*_*der 3 arrays perl hash

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

$hash{fieldName} = @myArray;
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ský 12

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

$hash{fieldName} = \@myArray;
Run Code Online (Sandbox Code Playgroud)

存储它,并:

my @myOtherArray = @{$hash{fieldName}};
Run Code Online (Sandbox Code Playgroud)

把它拿回来.它通过使用对数组的引用来解决标量需求.


V_D*_*D_R 6

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

  • 由于您分配了哈希的元素,因此赋值位于标量上下文中

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

  • 所以,值$hash{fieldName}变得等于数组的大小(scalar @myarray)


Sin*_*nür 5

而正确的答案确实是存储参考,有次地方之间的区别\@myArray,[ @myArray ](浅拷贝)和dclone(深拷贝)的问题.

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