在Perl中有没有办法重启当前正在运行的程序?

dgB*_*gBP 6 perl exit subroutine

我在Perl中运行一个程序,它在一个点上评估从子程序中调用的if语句中的数据,例如

sub check_good {
    if (!good) {
         # exit this subroutine
         # restart program
    } 
    else {
         # keep going
    }
} # end sub
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是退出并重新启动.我知道我可以exit 0;直接退出,但显然这是不正确的,如果我想回到开头.我尝试调用基本上启动程序的子程序,但是当它运行时它将再次回到这一点.我想把它放在while循环中,但这意味着将整个文件放在循环中,这将是非常不切实际的.

我实际上并不知道这是否可行,所以任何输入都会很棒.

mkb*_*mkb 9

如果你没有改变@ARGV,或者你保留了它的副本,你可能会做类似的事情exec($^X, $0, @ARGV).

$^X$0(或$EXECUTABLE_NAME$PROGRAM_NAME,见布赖恩的评论如下)是目前Perl解释器和电流perl脚本,分别.

  • 我建议使用`^ X`来确保重新启动的进程使用与原始脚本相同的perl解释器.即像`exec(^ X,$ 0,@ ARGV)`. (4认同)
  • 仅仅为了未来的维护者,我通常建议使用英文版的"可执行行噪声"变量,一个la - `exec($ EXECUTABLE_NAME,$ PROGRAM_NAME,@ ARGV)`.只需记住`使用英文qw {-no_match_vars}`或只提取您特别想要使用的变量名来避免性能损失.对于好奇的人来说,这篇文章在(http://search.cpan.org/~andk/Devel-SawAmpersand/lib/Devel/SawAmpersand.pm)中非常简洁地描述,并在"与正则表达式相关的变量"部分中提到. `perldoc perlvar`. (2认同)