【问题标题】:What is the difference between Perl modules autodie and Fatal?Perl 模块 autodie 和 Fatal 有什么区别?
【发布时间】:2010-04-05 11:17:01
【问题描述】:

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

【问题讨论】:

    标签: perl autodie


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      引用Fatal 文档

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

      【讨论】:

        【解决方案3】:

        使用autodie 而不是Fatal 的另一个原因是避免这个错误(来自Fatal 文档的BUGS 部分):

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2011-03-25
            • 1970-01-01
            • 2011-04-10
            • 2013-01-11
            • 2016-12-11
            • 2015-11-25
            • 2010-11-12
            • 2011-06-13
            相关资源
            最近更新 更多