Perl 通过推入子程序修改引用数组
Perl Modifying Reference Array via Push in Subroutine
我有一个数组要在子程序中修改。它作为第二个参数通过引用传递。好像没有修改,因为我return的时候,数组的长度和原来的值一样
这是我所做的片段:
sub readLine
{
my @array = @{$_[1]};
#Push value onto array
push @array, $myvalue;
}
sub main
{
my @array = ();
#Pass by reference
readLine($argument1, \@array);
print @array; #Prints 0
}
我是 Perl 的新手,如果我这样做正确,请告诉我。我阅读了类似问题的答案,但它仍然没有为我打印正确的值 (1)。我安装了最新版本的 Perl。
原始数组未被修改,因为您正在将其复制到 readLine()
中的 @array
中。你需要做这样的事情,你正在根据实际参考而不只是一个副本行事:
use strict;
use warnings;
use Data::Dump;
main();
sub main {
my @array;
foo(\@array, 'bar', 'bat', 'baz');
dd(@array);
}
sub foo {
my ($aref, @args) = @_;
push(@$aref, @args);
}
输出:
("bar", "bat", "baz")
您在 readLine
子例程中声明了一个词法(局部)变量,并且在子例程结束时它的值被丢弃。您永远不会使用传入的实际数组,因为您制作了它的副本。
尽管如此,您可以直接轻松地推送到引用数组。
push @{$_[1]}, $myvalue;
您编写的代码预计 $myvalue
已经从天而降(或者它可能在全局范围内某处定义?)但假设它有一个值,该值将被推入引用数组.
我有一个数组要在子程序中修改。它作为第二个参数通过引用传递。好像没有修改,因为我return的时候,数组的长度和原来的值一样
这是我所做的片段:
sub readLine
{
my @array = @{$_[1]};
#Push value onto array
push @array, $myvalue;
}
sub main
{
my @array = ();
#Pass by reference
readLine($argument1, \@array);
print @array; #Prints 0
}
我是 Perl 的新手,如果我这样做正确,请告诉我。我阅读了类似问题的答案,但它仍然没有为我打印正确的值 (1)。我安装了最新版本的 Perl。
原始数组未被修改,因为您正在将其复制到 readLine()
中的 @array
中。你需要做这样的事情,你正在根据实际参考而不只是一个副本行事:
use strict;
use warnings;
use Data::Dump;
main();
sub main {
my @array;
foo(\@array, 'bar', 'bat', 'baz');
dd(@array);
}
sub foo {
my ($aref, @args) = @_;
push(@$aref, @args);
}
输出:
("bar", "bat", "baz")
您在 readLine
子例程中声明了一个词法(局部)变量,并且在子例程结束时它的值被丢弃。您永远不会使用传入的实际数组,因为您制作了它的副本。
尽管如此,您可以直接轻松地推送到引用数组。
push @{$_[1]}, $myvalue;
您编写的代码预计 $myvalue
已经从天而降(或者它可能在全局范围内某处定义?)但假设它有一个值,该值将被推入引用数组.