作者:shamrock-wrh_186 | 来源:互联网 | 2023-05-23 20:07
我想创建一个2d数组(@combinations
),它包含另一个数组(@indices
)的所有组合.
我正在使用push
附加另一个数组(@temp2
)的引用.当我打印我的2d数组(使用Dumper
)时,它并不像我预期的那样:print
循环内的语句显示每个推送的引用都是非空列表,但最终我的所有引用都指向一个空列表.为什么?
use Math::Combinatorics;
use Data::Dumper;
my (@combinations, @temp2);
my @indices = (0, 2, 4);
my $count = 1;
my $counter = @indices;
while ($counter>= $count) {
my $c = Math::Combinatorics->new(
count => $count,
data => \@indices,
);
$count++;
while (@temp2 = $c->next_combination) {
print "@temp2 \n";
push @combinations, \@temp2;
}
}
print Dumper(\@combinations);
Hans Lub..
5
因为您@temp2
在顶层声明,所以引用\@temp2
将始终指向相同的数据.因为一旦为@temp2
空就退出循环,所有引用@combinations
将指向同一个空数组.
补救很容易:通过写入声明循环的@temp2
本地while
while (my @temp2 = $c->next_combination) {
每次重复循环时,这将创建一个具有自己引用的新变量@temp2
.
1> Hans Lub..:
因为您@temp2
在顶层声明,所以引用\@temp2
将始终指向相同的数据.因为一旦为@temp2
空就退出循环,所有引用@combinations
将指向同一个空数组.
补救很容易:通过写入声明循环的@temp2
本地while
while (my @temp2 = $c->next_combination) {
每次重复循环时,这将创建一个具有自己引用的新变量@temp2
.