我将一个数组作为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;