我将数组作为对子对象的引用。我必须在其中添加值,但无法正常工作。我的代码是:
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句