在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";
}
我想修改一个位于 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";
}