【问题标题】:use parent 'Exporter' vs. use Exporter 'import';使用父“出口商”与使用出口商“进口”;
【发布时间】:2013-12-24 18:04:58
【问题描述】:

如果我使用第一个示例而不是第二个示例,我会得到什么?

package Some::Module;
use strict;
use 5.10.1;

use parent 'Exporter';
our @EXPORT_OK = qw(some_func);

package Some::Module;
use strict;
use 5.10.0;

use Exporter 'import';
our @EXPORT_OK = qw(some_func);

【问题讨论】:

    标签: perl import export


    【解决方案1】:

    没什么,真的。 Exporter 最初被设想为基类;后来它得到了增强,允许你只导入它的导入方法。现在没有理由继承它。

    如果您正在编写可与 Perl 5.8.2 及更早版本一起使用的代码,您应该需要足够版本的 Exporter:

    use Exporter 5.57 'import';
    

    【讨论】:

    【解决方案2】:

    use Exporter 'import' 在 Exporter 5.57+ 中工作,自 Perl 5.8.3 以来它已与 Perl 捆绑在一起。如果您需要支持与早期版本的 Perl 捆绑在一起的旧版本的 Exporter,那么您应该从 Exporter 继承。

    (Exporter 是一个双生命模块,因此旧版本 Perl 的用户可以在技术上升级 Exporter 而无需升级所有 Perl;但是旧版本的 cpan 工具有时在升级双生命模块时会出现问题,因此升级 Exporter对他们来说可能很棘手。)

    如果您不关心 Perl 的过时版本,请务必使用 use Exporter 'import'。 Exporter 并不是真正以面向对象/类的方式编写的,因此没有真正的理由从它继承。 (与我自己的导出器模块 Exporter::Tiny 不同,它的设计考虑了继承/覆盖!)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2012-08-11
      • 2015-09-08
      • 2021-09-28
      • 2019-06-04
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多