Perl通过推入子程序修改参考数组

Kim*_*aru 1 arrays perl pass-by-reference

我有一个我想在子程序中修改的数组.它作为第二个参数通过引用传入.它似乎没有被修改,因为当我返回时,数组的长度与原始值相同.

这是我所做的一小部分:

sub readLine
{
    my @array = @{$_[1]};
    #Push value onto array
    push @array, $myvalue;
}

sub main 
{
    my @array = ();
    #Pass by reference
    readLine($argument1, \@array);

    print @array; #Prints 0
}
Run Code Online (Sandbox Code Playgroud)

我是Perl的新手,所以如果我正确地做这件事,请告诉我.我读了类似问题的答案,但仍然没有为我打印正确的值(1).我安装了最新版本的Perl.

Mat*_*cob 7

原来的阵列中,无法修改,因为你正在做它的副本到@arrayreadLine().你需要做这样的事情,你在实际的参考而不仅仅是一个副本:

use strict;
use warnings;
use Data::Dump;

main();

sub main {
    my @array;
    foo(\@array, 'bar', 'bat', 'baz');
    dd(@array);
}

sub foo {
    my ($aref, @args) = @_;
    push(@$aref, @args);
}
Run Code Online (Sandbox Code Playgroud)

输出:

("bar", "bat", "baz")
Run Code Online (Sandbox Code Playgroud)