DVK*_*DVK 8 perl eval system die
可以在Perl 5中system()
拨打电话die
吗?
(换句话说,为了100%防止system()
打电话的程序,它是否需要被包装成一个eval
块,还是完全没必要?)
我没有找到这种可能性perldoc system
,但没有找到准确的"这个呼叫永远不会死".
注意:问题是关于这里的基本CORE Perl,没有autodie
或任何其他具有类似效果的自定义模块.此外,假设没有ALRM
设置信号,或任何其他自定义信号处理程序.
我假设Perl 5.*的所有版本都表现相同,但如果没有,则可以理解与5.8相关的答案.
除非我对源代码的解释不正确,否则这似乎是一种可能性:
来源:Perl 5.16.2(也检查5.8.8),文件:pp_sys.c,行PP(pp_system)
代码:4224 :
if (n != sizeof(int))
DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
Run Code Online (Sandbox Code Playgroud)
DIE
被Perl_die(pTHX_ const* pat, ...)
宣布util.c
根据文档,"恐慌:孩子popen errno读"意味着"分叉的孩子返回了一个关于其错误的难以理解的消息".
惯例是当解释器因内部错误而死亡时,消息开始"恐慌:".从历史上看,许多恐慌信息都是简洁的固定字符串,这意味着引发恐慌的超出范围的值会丢失.现在我们尝试报告这些值,因为这样的恐慌可能是不可重复的,并且原始错误消息可能是我们在尝试查找原因时获得的唯一诊断.