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

发布于 2024-08-27 21:14:58 字数 209 浏览 5 评论 0 原文

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

The Perl modules autodie and Fatal seem to be doing similar things. What are the reasons for using one in preference to the other?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等待圉鍢 2024-09-03 21:14:58

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

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

如果有选择的话,你肯定会更喜欢autodie。它将作为核心模块包含在即将发布的 Perl 5.12 版本中。

autodie 模块需要 Perl 5.8。您使用 Fatal 的唯一原因是如果您一直使用 Perl 的旧版本(例如:5.6),但 5.8 自 2002 年以来就已发布,所以希望您不会遇到这种情况。

The Fatal module was added to the Perl core in version 5.05 (1998). The Fatal module has some significant shortcomings and inconsistencies in its API which couldn't be fixed in a backwards compatible way (ie: fixing the API would break existing code which used Fatal).

The newer autodie module was written to provide a more consistent API and to allow the effect of the pragma to be lexically scoped rather than global (which can have unexpected side effects).

If you have a choice, you should definitely prefer autodie. It will be included as a core module in the upcoming 5.12 release of Perl.

The autodie module requires Perl 5.8. About the only reason you'd use Fatal is if you were stuck with a really old version of Perl (eg: 5.6), but 5.8 has been out since 2002 so hopefully that won't be the case for you.

吹泡泡o 2024-09-03 21:14:58

引用 Fatal 文档

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

To quote the Fatal documentation

Fatal has been obsoleted by the new autodie pragma. Please use autodie in preference to Fatal. autodie supports lexical scoping, throws real exception objects, and provides much nicer error messages.

黑凤梨 2024-09-03 21:14:58

使用 autodie 而不是 Fatal 是为了避免这个 bug(来自 致命 文档):

致命地破坏了其中的上下文
函数被调用并且总是成功
标量上下文,除非
使用 :void 标签。这个问题确实
autodie 中不存在。

Another reason to use autodie instead of Fatal is to avoid this bug (from the BUGS section of the Fatal docs):

Fatal clobbers the context in which a
function is called and always makes it
a scalar context, except when the
:void tag is used. This problem does
not exist in autodie.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文