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

qncylg1j  于 2022-12-30  发布在  Perl
关注(0)|答案(3)|浏览(250)

Perl模块autodieFatal似乎做着类似的事情,为什么要优先使用其中一个呢?

z9zf31ra

z9zf31ra1#

Fatal模块是在版本5.05(1998)中添加到Perl核心的。Fatal模块在其API中有一些严重的缺陷和不一致性,无法通过向后兼容的方式修复(即:修复API将破坏使用Fatal的现有代码)。
较新的autodie模块是为了提供更一致的API,并允许杂注的作用域是词法范围,而不是全局范围(这可能会有意想不到的副作用)。
如果可以选择的话,您肯定会选择autodie,它将作为核心模块包含在即将发布的Perl 5.12版本中。
autodie模块需要Perl 5.8。使用Fatal的唯一原因是如果您坚持使用非常旧的Perl版本(例如:5.6),但是5.8从2002年就已经推出了,所以希望你不会遇到这种情况。

k3bvogb1

k3bvogb12#

引用Fatal文档
致命的已被新的autodie杂注废弃。请优先使用autodie而不是致命的。autodie支持词法作用域,抛出真实的的异常对象,并提供更好的错误消息。

mzillmmw

mzillmmw3#

使用autodie而不是Fatal的另一个原因是为了避免此错误(来自致命文档的BUGS部分):
Fatal会破坏函数被调用的上下文,并且总是使它成为标量上下文,除非使用了:void标签。这个问题在autodie中不存在。

相关问题