我正在使用语法检查来查看我的Perl脚本是否以正确的方式使用。如果语法不正确,我会显示一条消息,说明正确的语法是什么,然后结束程序的执行。
间:
print "Please use the following syntax: ...";
exit 1;
和
die("Please use the following syntax: ...");
我应该使用哪一个?我知道die
如果有异常处理就会成为答案,但事实并非如此。
哪一个是没有异常处理的程序终止的更好选择?还请说明原因。
答案 0 :(得分:35)
这取决于您希望STDERR和STDOUT发生什么。我更喜欢向STDERR发送错误和警告类型消息,以便当有人尝试将输出重定向到文件时,他们仍然会看到错误消息;但是,有时会使用STDOUT向用户传达状态,以便他或她可以tail -f
或对其进行分页,并且在写入STDERR的那些时候会导致痛苦(他们必须将STDERR重定向到STDOUT, 2>&1
,并不是每个人都知道如何做到这一点。那么使用哪个die
或print
和exit
,很大程度上取决于您所编写的程序类型。
使用die
还有其他好处/缺点:
die
使用eval
,但不能退出die
信号安装信号处理程序来调用__DIE__
时运行代码die
功能每个人都有能力做到这一点的时候,以及可以做到的痛苦时期。
答案 1 :(得分:21)
print
打印到STDOUT
但die
打印到STDERR
exit 1
退出,退出状态为1
但die
退出,退出当前值为errno
$!
因此die
是首选方式,因为它更简单,更短。
答案 2 :(得分:6)
最好遵循现有做法(“最少惊喜规则”):exit with 2 on a fatal error such as a syntax error。