如何在Perl中终止程序 - 退出或死掉?

时间:2010-08-30 14:10:13

标签: perl

我正在使用语法检查来查看我的Perl脚本是否以正确的方式使用。如果语法不正确,我会显示一条消息,说明正确的语法是什么,然后结束程序的执行。

间:

print "Please use the following syntax: ...";
exit 1;

die("Please use the following syntax: ...");

我应该使用哪一个?我知道die如果有异常处理就会成为答案,但事实并非如此。

哪一个是没有异常处理的程序终止的更好选择?还请说明原因。

3 个答案:

答案 0 :(得分:35)

这取决于您希望STDERR和STDOUT发生什么。我更喜欢向STDERR发送错误和警告类型消息,以便当有人尝试将输出重定向到文件时,他们仍然会看到错误消息;但是,有时会使用STDOUT向用户传达状态,以便他或她可以tail -f或对其进行分页,并且在写入STDERR的那些时候会导致痛苦(他们必须将STDERR重定向到STDOUT, 2>&1,并不是每个人都知道如何做到这一点。那么使用哪个dieprintexit,很大程度上取决于您所编写的程序类型。

使用die还有其他好处/缺点:

  • 您可以die使用eval,但不能退出
  • 您可以在程序通过为die信号安装信号处理程序来调用__DIE__时运行代码
  • 您可以轻松覆盖die功能

每个人都有能力做到这一点的时候,以及可以做到的痛苦时期。

答案 1 :(得分:21)

print打印到STDOUTdie打印到STDERR

exit 1退出,退出状态为1die退出,退出当前值为errno $!

因此die是首选方式,因为它更简单,更短。

答案 2 :(得分:6)

最好遵循现有做法(“最少惊喜规则”):exit with 2 on a fatal error such as a syntax error