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

Pass by reference array inside hash in perl

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

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

尝试

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