迭代数组引用会导致无限循环

时间:2014-04-25 18:00:20

标签: arrays perl loops

我有以下方法:

sub CleanErrorLog {
  my ($actnList, $cmplist) = @_;


  print "\n" . ("-" x 100) . "\n";
  print "\t\t---->>  Begin Clean Error Output  <<----";
  for my $comp (@$cmplist)
  { 
    for my $action (@$actnList)
    { 
        Build($comp, $action);
    }
  }
}

这称为:

CleanErrorLog(\@actionList, \@failedComponents) if @failedComponents;

然而,循环永远不会结束 - 它不断尝试Build($comp, $action)一遍又一遍。这是我第一次使用\@参数,所以我可能做错了什么?

1 个答案:

答案 0 :(得分:2)

您的Build函数可能修改了@actionList@failedComponents数组。当您通过引用传递数组时,这些修改可能会导致无限循环。作为指导,永远不要修改您正在迭代的数组或哈希。始终先复印一份。例如,您可以将副本传递给CleanErrorLog

CleanErrorLog([@actionList], [@failedComponents]) if @failedComponents;

更好的解决方法是重做Build,这样就不会修改这些变量。