我有以下方法:
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)
一遍又一遍。这是我第一次使用\@
参数,所以我可能做错了什么?
答案 0 :(得分:2)
您的Build
函数可能修改了@actionList
或@failedComponents
数组。当您通过引用传递数组时,这些修改可能会导致无限循环。作为指导,永远不要修改您正在迭代的数组或哈希。始终先复印一份。例如,您可以将副本传递给CleanErrorLog
:
CleanErrorLog([@actionList], [@failedComponents]) if @failedComponents;
更好的解决方法是重做Build
,这样就不会修改这些变量。