如何在数组结构数组中制作嵌套数组的副本

时间:2016-04-12 22:13:46

标签: arrays perl reference shallow-copy

我正在尝试制作嵌套数组的副本,看来我继续通过我的尝试进行引用。

更具体地说,我正在尝试拥有一个数组数组,其中每个子数组都基于前一个数组构建。这是我的尝试:

#!/usr/bin/perl -w
use strict;
use warnings;

my @aoa=[(1)];
my $i = 2;
foreach (@aoa){
  my $temp = $_;#copy current array into $temp
  push $temp, $i++;
  push @aoa, $temp;
  last if $_->[-1] == 5;
} 
#print contents of @aoa
foreach my $row (@aoa){
  foreach my $ele (@$row){
    print "$ele  ";
  }
  print "\n";
}

我的输出是:

1  2  3  4  5  
1  2  3  4  5  
1  2  3  4  5  
1  2  3  4  5  
1  2  3  4  5  

我希望/期望它是:

1
1 2
1 2 3
1 2 3 4 
1 2 3 4 5 

我假设我的问题在于我如何分配$ temp,如果不是这样,请告诉我。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

使用my创建一个新数组,复制要构建的数组的内容,然后添加到该数组中。

尽可能保持与您的代码尽可能接近

foreach (@aoa) {
  last if $_->[-1] == 5;
  my @temp = @$_;         #copy current array into @temp
  push @temp, $i++;
  push @aoa, \@temp;
}