Perl数组解引用在将其作为参数传递给子例程时不能正常工作



我将一个数组作为ref传递给一个sub。在那里我必须为它添加值,但它不起作用。我的代码是:

my @scalarArray1 = ();
sub CompareScalers() {
    fillScalarArray( $_[0], @scalarArray1 );    #pass arrays by ref
}
sub fillScalarArray() {
    my $filename = $_[0];                        #first file name as input file
    open( my $fh, '<:encoding(UTF-8)', $filename ) or die "Could not open file '$filename' $!";
    my @array = @{ $_[1] };
    while ( my $row = <$fh> ) {
        push( @array, $row );
    }
}

while循环结束时数组大小的调试打印如下:

 DB<29> p $#scalarArray1
-1
 DB<30> p $#array
1551

my @array = @{$_[1]}复制数组。当将项压入副本时,不影响原始数组。

我假设您希望函数实际修改引用所指向的数组。要做到这一点,消除my @array = ...行并将push调用更改为如下所示,它使用引用而不复制:

push (@{$_[1]} , $row);

为了可读性,您可以将数组引用赋值给指定的标量变量,并使用该变量:

my $arrayRef = $_[1];
push @{$arrayRef}, $row;

最新更新