如何在 Perl 中使用子程序修改数组元素

How to modify array elements using subroutine in Perl

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

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

下面是我的程序。

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

上面的代码有什么问题?

您编写的每个 Perl 文件都应该以 use strict; use warnings; 开头。这将帮助您避免这样的错误。

问题出在这一行:

    my $arrayref = @_;

您正在将一个数组分配给一个标量,因此该数组是在标量上下文中计算的,它会产生数组中的元素数。

你应该做的是:

    my ($arrayref) = @_;

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

列表分配记录在perldoc perldata中(以“列表可以分配给 ...”开头的部分)。