簡體   English   中英

將Perl數組取消引用作為參數傳遞給子例程時,它無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM