[英]Perl Array dereference not working properly while passing it as an argument to a subroutine
我將數組作為對子對象的引用。 我必須在其中添加值,但無法正常工作。 我的代碼是:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.