Perl模块autodie和Fatal似乎做着类似的事情,为什么要优先使用其中一个呢?
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年就已经推出了,所以希望你不会遇到这种情况。
k3bvogb12#
引用Fatal文档致命的已被新的autodie杂注废弃。请优先使用autodie而不是致命的。autodie支持词法作用域,抛出真实的的异常对象,并提供更好的错误消息。
mzillmmw3#
使用autodie而不是Fatal的另一个原因是为了避免此错误(来自致命文档的BUGS部分):Fatal会破坏函数被调用的上下文,并且总是使它成为标量上下文,除非使用了:void标签。这个问题在autodie中不存在。
3条答案
按热度按时间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年就已经推出了,所以希望你不会遇到这种情况。
k3bvogb12#
引用Fatal文档
致命的已被新的autodie杂注废弃。请优先使用autodie而不是致命的。autodie支持词法作用域,抛出真实的的异常对象,并提供更好的错误消息。
mzillmmw3#
使用autodie而不是Fatal的另一个原因是为了避免此错误(来自致命文档的BUGS部分):
Fatal会破坏函数被调用的上下文,并且总是使它成为标量上下文,除非使用了:void标签。这个问题在autodie中不存在。