我有一个现有的数组,希望将其作为哈希值添加。我知道可以使用数组作为值,但看不到分配现有数组的方法。我基本上想这样做:
$hash{fieldName} = @myArray;
显然,仅仅这样是不起作用的!需要帮助!
你只能在哈希表/数组中存储标量值。你需要使用:
$hash{fieldName} = \@myArray;
进行存储:
my @myOtherArray = @{$hash{fieldName}};
通过使用对数组的引用,绕过标量要求来获取它。
$hash{fieldName}[$index]
访问单个元素。 - friedo$hash{fieldName}->[$index]
。 - Joe Casadonte->
。请查看 perldsc 中的示例。 - daotoadmy(@foo) = (1..3); my(%bar) = (a => 1, b => 2, c => 3); $bar{d} = \@foo;
那么 print "D: $bar{d}->[1]";
和 print "D: $bar{d}[1]";
都会输出 "D: 2"。但是这个:my($baz) = $bar{d}; print "$baz[1]";
会产生错误,而这个是可以的:print "$baz->[1]";
。 - Joe Casadonte既然没有人提到,那么你的代码所做的是:
由于你正在对哈希表的元素进行赋值,所以赋值处于标量上下文中
在标量上下文中,数组的值变为数组的大小
因此,$hash{fieldName}
的值等于数组的大小 (scalar @myarray
)
\@myArray
、[ @myArray ]
(浅拷贝)和dclone(深拷贝)之间的区别很重要。$hash{fieldName} = \@myArray
,那么$hash{fieldName}->[2]
将修改@myArray
的第三个元素。如果@myArray
本身不包含任何引用,则存储浅拷贝将帮助您避免该行为。$hash{fieldName} = \@myArray
@{$hash{fieldName}}