我有以下代码定义嵌套数组,然后循环遍历数组并输出它。我想使用注释掉的行来提取内部数组,但它不起作用,因为它会使内部数组变平。我不得不使用随后的三行。如何让注释掉的线路正常工作?
use Data::Dumper;
my @arr1;
for $i (0..9)
{
my @arr2;
my @arr3;
for $j ('A'..'D') {
push @arr2, $j;
push @arr3, int(rand(100));
}
push @arr1, [$i, \@arr2, \@arr3];
}
for $linkarray (@arr1) {
#my ($i, @arr2, @arr3) = @$linkarray;
my $i = @$linkarray[0];
my @arr2 = @$linkarray[1];
my @arr3 = @$linkarray[2];
print "i: $i\narr2: " . Dumper(@arr2) . "\narr3: " . Dumper(@arr3) . "\n";
}
答案 0 :(得分:1)
如果遇到问题,想一想如何使用命名数组,然后用返回引用的块替换名称。
如果命名数组为$a[0]
,则引用数组为${REF}[0]
。
如果命名数组为@a
,则引用数组为@{REF}
。
容易!
my $i = ${ $linkarray }[0];
my @arr2 = @{ ${ $linkarray }[1] };
my @arr3 = @{ ${ $linkarray }[2] };
但是,以下内容更容易阅读:
my $i = $linkarray->[0];
my @arr2 = @{ $linkarray->[1] };
my @arr3 = @{ $linkarray->[2] };
此外,你真的不应该像那样复制那些数组。这很浪费。只需使用参考文献。
my $i = $linkarray->[0];
my $arr2 = $linkarray->[1];
my $arr3 = $linkarray->[2];
最后,这简化为以下内容:
my ($i, $arr2, $arr3) = @$linkarray;
参考文献: