我想
my @Array;
for (my $i=1; $i <= 10000; $i++) {
ProsArray(\@Array);
}
sub ProsArray {
my @Array = @{$_[0]};
#do stuff to @Array (e.g., remove or add elements...
push(@Array,10);
return(@Array);
}
但是,子程序作用于我最初声明的@Array
- 而不是它在前一次迭代中返回的@Array
。
我想要像
这样的东西while(...){
@Array = ProsArray(\@Array);
}
所以它会处理返回的数组而不是初始数组。
答案 0 :(得分:2)
来自评论:
我相信您面临的问题是由您进行递归的方式引起的。
在
@Array = ProsArray(\@Array);
每次都将相同的引用传递给原始的@array对象。尝试删除&#34; \&#34;并重新运行您的代码。
答案 1 :(得分:2)
如果你想在你的阵列上操作,你需要对你传递的参考进行操作。或者,您需要存储返回值。
use strict;
use warnings;
use Data::Printer;
my @array_inplace = (1 .. 5);
my @array_return = (1 .. 5);
for (1 .. 3) {
ProsArrayInplace(\@array_inplace);
@array_return = ProsArrayRet(\@array_return); # replace array with retval
}
sub ProsArrayInplace {
my ($array) = @_;
#do stuff to @$Array (e.g., remove or add elements...
push(@$array,10); # modify in place
}
sub ProsArrayRet {
my @array = @{$_[0]}; #dereference
#do stuff to @$Array (e.g., remove or add elements...
push(@array,10); #modify array scoped to sub
return @array; #return modified array
}
p(@array_inplace);
p(@array_return);
结果:
[
[0] 1,
[1] 2,
[2] 3,
[3] 4,
[4] 5,
[5] 10,
[6] 10,
[7] 10
]
[
[0] 1,
[1] 2,
[2] 3,
[3] 4,
[4] 5,
[5] 10,
[6] 10,
[7] 10
]