【发布时间】:2015-12-23 22:40:47
【问题描述】:
我想修改一个位于 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'] 的引用吗?
【问题讨论】:
-
“如果数组不在散列中,它工作正常” 不,它没有。您的子例程只是修改传递的数组的本地副本。无论它来自哪里,它都不会改变外部数组
-
@Borodin 是的,我的错。我已将局部变量与子例程外部的名称相同,因此看起来函数正在更改它。
-
您必须始终
use strict和use warnings在您编写的每个 Perl 程序的顶部,并用my声明每个变量.这将保护您免受最简单的错误的影响,并且会在此处显示错误
标签: arrays perl hash pass-by-reference