我正在尝试修改传递给子例程的数组。
我将数组引用传递给子例程并分配新值,但它没有反映在调用者端。
以下是我的计划。
sub receiveArray {
my $arrayref = @_;
@{$arrayref} = ( 4, 5, 6 );
}
@ar = ( 1, 2, 3 );
print "Values of the function before calling the function\n";
foreach my $var ( @ar ) {
print $var;
print "\n";
}
receiveArray(\@ar);
print "Values of the function after calling the function\n";
foreach my $var ( @ar ) {
print $var;
print "\n";
}
上面的代码有什么问题?
答案 0 :(得分:10)
您应该使用use strict; use warnings;
启动您编写的每个Perl文件。这将有助于您避免这样的错误。
问题出在这一行:
my $arrayref = @_;
您将数组分配给标量,因此数组在标量上下文中进行计算,从而产生数组中元素的数量。
你应该做的是:
my ($arrayref) = @_;
现在它使用列表赋值,将第一个函数参数放入$arrayref
(并忽略其余的,如果有的话)。
列表分配记录在perldoc perldata
中(以&#34开头的部分; 列表可以分配到 ......")。