我想修改一个位于perl中哈希内部的数组。但是,我似乎无法在这里通过引用。 如果数组不在哈希中,它可以正常工作。这是我的代码:
%hash = (
array1 => ['foo', 2, 'bar']
);
print @{$hash{array1}}, "\n";
changeArray($hash{array1});
print @{$hash{array1}}, "\n";
sub changeArray
{
@array = @{$_[0]};
$array[0] = "not foo";
}
输出:
$ ./scrap.pl
foo2bar
foo2bar
不是$hash{array1}
对匿名数组的引用['foo',2,'bar']?
答案 0 :(得分:5)
在你的changeArray子中,你正在从散列中包含的arrayref创建一个数组@array
,
因此所有更改都将针对@array,当changeArray完成时,它将超出范围。
试
sub changeArray {
my $arrayref = $_[0];
$arrayref->[0] = "not foo";
}