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

tgu*_*926 2 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";
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./scrap.pl
foo2bar
foo2bar
Run Code Online (Sandbox Code Playgroud)

是不是$hash{array1}对匿名数组['foo',2,'bar']的引用?

byt*_*her 5

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

尝试

sub changeArray {
   my $arrayref = $_[0];
   $arrayref->[0] = "not foo";
}
Run Code Online (Sandbox Code Playgroud)

  • ` - >`是*中缀解除引用运算符*.您可以在[perlop](http://perldoc.perl.org/perlop.html#The-Arrow-Operator)联机帮助页上找到该文档. (3认同)