Perl模块autodie和Fatal有什么区别?

时间:2010-04-05 11:17:02

标签: perl autodie

Perl模块autodieFatal似乎在做类似的事情。使用一个优先于另一个的原因是什么?

4 个答案:

答案 0 :(得分:10)

在版本5.05(1998)中将Fatal模块添加到Perl核心。 Fatal模块在API中存在一些明显的缺点和不一致,无法以向后兼容的方式修复(即:修复API会破坏使用Fatal的现有代码)。

编写较新的autodie模块是为了提供更一致的API,并允许pragma的作用是词法范围而不是全局(可能会产生意外的副作用)。

如果你有选择,你绝对应该选择autodie。它将作为核心模块包含在即将发布的Perl 5.12版本中。

autodie模块需要Perl 5.8。关于你使用Fatal的唯一原因是如果你被困在一个非常旧的Perl版本(例如:5.6),但5.8自2002年以来已经出局,所以希望你不会这样。

答案 1 :(得分:6)

引用Fatal文档

  

Fatal已经被新的autodie pragma淘汰了。请使用autodie而不是Fatal。 autodie支持词法作用域,抛出真正的异常对象,并提供更好的错误消息。

答案 2 :(得分:2)

使用autodie代替Fatal的另一个原因是为了避免此错误(来自Fatal文档的BUGS部分):

  

致命的破坏者在其中的背景   函数被调用并且总是成功   标量上下文,除了   :使用void标记。这个问题呢   在autodie中不存在。

答案 3 :(得分:2)

Paul Fenwick的文章autodie - The art of Klingon Programming首先解释了Fatal的一些缺点。