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']的引用?
在你的changeArray子中,你正在@array从散列中包含的arrayref 创建一个数组,因此所有更改都将用于@array,当changeArray完成时,它将超出范围.
尝试
sub changeArray {
my $arrayref = $_[0];
$arrayref->[0] = "not foo";
}
Run Code Online (Sandbox Code Playgroud)