perl - 在'Deep recursion on subroutine'上,Perl脚本 stucks

  显示原文与译文双语对照的内容

我使用 10 -20方法的perl文件 build_ios.pl

当我在构建计算机上运行时 /usr/bin/perl/Users/snaggs/scripts/build_ios.pl 我得到了一个错误:


Deep recursion on subroutine"main::writeLogAndPrint" at/Users/snaggs/scripts/build_ios.pl line 179.


Deep recursion on subroutine"main::af_exit" at/Users/snaggs/scripts/build_ios.pl line 167.



以下是错误指向的相关方法:


sub writeLogAndPrint


{


 my $command = shift ||"";



 open(my $fh, '>>', $VERBOSE_LOG_FILE_ABS) or # line 167


 af_exit(%ERROR_CODE_12);


 #die"Can't open the file: $!";


 print $fh getTimeLoggerHelper().":". $command."n";


 close $fh;


 print $command."n";


}



sub af_exit


{


 my %_error = @_;


 writeLogAndPrint($_error{'id'}); # line 179


 exit($_error{'id'});


}



在这里错误中编写stucks脚本。 我的生成机器使用版本 v5.18.2

本地运行相同的代码,所有的工作都。

我的代码有什么错怎么处理?

[Edit]

我注意到 af_exit 调用 writeLogAndPrintwriteLogAndPrint 可以再次调用 af_exit,这会导致无限循环

谢谢,

时间: 原作者:

writeLogAndPrint 子程序中,你试图打开日志文件。 如果失败了,你调用 af_exit 再次调用 writeLogAndPrint 。 有一个循环。

检查你想打开日志文件的$VERBOSE_LOG_FILE_ABS 变量。

原作者:

添加 helper 函数以中断循环 resursion 。


sub _af_exit


{


 my %_error = @_;


 exit($_error{'id'});


}



sub writeLogAndPrint


{


 my $command = shift ||"";



 open(my $fh, '>>', $VERBOSE_LOG_FILE_ABS) or


 _af_exit(%ERROR_CODE_12);


 #die"Can't open the file: $!";


 print $fh getTimeLoggerHelper().":". $command."n";


 close $fh;


 print $command."n";


}



sub af_exit


{


 my %_error = @_;


 writeLogAndPrint($_error{'id'});


 _af_exit( @_ );


}



有关递归的更多信息,请参见查看递归代码。

...