我将数组作为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
答案 0 :(得分:4)
my @array = @{$_[1]}
制作数组的副本。将项目推送到副本时,原始数组不受影响。
我假设您希望您的函数实际修改引用指向的数组。要做到这一点,请删除my @array = ...
行并将push
调用更改为以下内容,使用引用而不复制:
push (@{$_[1]} , $row);
为了便于阅读,您可以将数组引用分配给命名的标量变量,并改为使用它:
my $arrayRef = $_[1];
push @{$arrayRef}, $row;