访问数组超出循环范围的最终值

时间:2014-01-11 23:29:01

标签: perl

如何在循环完成后从范围中访问 @missing 数组值?

我试图将其声明范围,但是当我打印出范围时,我没有得到任何值。 这是我的代码:

my $last= $order[0];
for my $cur ( @order[1..$#order] ) {
   .
   .
   .
   my @missing = grep { ! $b{$_} } @aa;
   print Dumper @missing;
   $last = $cur; 
}   

2 个答案:

答案 0 :(得分:0)

目前它是一个循环我的变量,它的范围仅在for循环中。

如果要在封闭循环的范围内访问它,请在循环之前声明@missing。

my $last= $order[0];
my @missing = ();
for my $cur ( @order[1..$#order] ) {
   my @aa= flat $last;
   my @bb= flat $cur;
   my %b = map { $_ => 1 } @bb;
   @missing = ();  # reset from last use
   @missing = grep { ! $b{$_} } @aa;
   print Dumper @missing;
   $last = $cur; 
}   

print STDOUT "Final missing: ",@missing;

答案 1 :(得分:0)

您并没有尝试访问代码中的@missing数组,因此我对您的意思有点困惑。但我假设你想要的是为每次迭代存储来自@missing的不同元素。所以,做到这一点。

my @all_missing;
for .... {
    ...
    my @missing = grep { ! $b{$_} } @aa;
    push @all_missing, \@missing;            # store ref to array
}

# all the "missing" elements are now stored in the two-dimensional array
# @all_missing

因为您使用词法变量@missing,所以可以直接存储对它的引用。每次迭代都会超出范围并初始化为新的内存地址。