将Perl数组取消引用作为参数传递给子例程时,它无法正常工作

沉思

我将数组作为对子对象的引用。我必须在其中添加值,但无法正常工作。我的代码是:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Perl:CGI模块-将param()作为参数传递给子例程

将数组的数组传递给Perl中的子例程

将2d数组作为1d参数fortran传递给子例程

xargs将多个参数传递给perl子例程?

将参数传递给Perl类子例程

在Perl中,将参数传递给子例程,该子例程也是参数

将引用作为参数传递给类的正确方法

perl将内部数组作为子例程的参数发送

如何将正则表达式作为参数传递给Perl 6中的子例程

将子例程传递给Perl子例程

如何取消引用作为传递给函数的数组元素的指针

传递给子例程时,为什么对数组的引用会更改为哈希引用

将函数引用作为参数传递

将方法引用作为参数传递

Perl + Tk:将(滚动/列表框)小部件引用传递给子例程

将参数传递给 dockerfile 无法正常工作

参数传递给Perl子例程的顺序重要吗?

如何将哈希和数组的引用传递给子例程

Perl,将数组传递给子例程,处理未声明的变量

将数组,标量和哈希传递给Perl中的子例程

将数组和哈希传递给Perl中多个线程的子例程

为什么不能将作为常量引用传递给函数的数组的 .size() 用作模板参数?

Perl:如何访问传递给子例程的哈希数组

Perl:传递给子例程的数组的打印名称

Perl将哈希引用从Foreach循环传递到子例程(哈希数组)

是否有将FXML控制器引用作为参数传递给方法的通用方法?

如何将多个参数传递给子例程?

FORTRAN:将伪参数传递给子例程

尝试取消引用作为指向后端的struct对象的指针的接口,以便可以将值传递给函数