在perl中通过哈希内部的引用数组传递

时间:2015-09-26 03:29:52

标签: arrays perl hash pass-by-reference

我想修改一个位于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']?

1 个答案:

答案 0 :(得分:5)

在你的changeArray子中,你正在从散列中包含的arrayref创建一个数组@array, 因此所有更改都将针对@array,当changeArray完成时,它将超出范围。

sub changeArray {
   my $arrayref = $_[0];
   $arrayref->[0] = "not foo";
}