如何使用Perl中的子例程修改数组元素

时间:2016-06-18 07:52:12

标签: arrays perl reference subroutine

我正在尝试修改传递给子例程的数组。

我将数组引用传递给子例程并分配新值,但它没有反映在调用者端。

以下是我的计划。

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";
}

上面的代码有什么问题?

1 个答案:

答案 0 :(得分:10)

您应该使用use strict; use warnings;启动您编写的每个Perl文件。这将有助于您避免这样的错误。

问题出在这一行:

    my $arrayref = @_;

您将数组分配给标量,因此数组在标量上下文中进行计算,从而产生数组中元素的数量。

你应该做的是:

    my ($arrayref) = @_;

现在它使用列表赋值,将第一个函数参数放入$arrayref(并忽略其余的,如果有的话)。

列表分配记录在perldoc perldata中(以&#34开头的部分; 列表可以分配到 ......")。