如果我使用第一个例子而不是第二个例子,我会得到什么?
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);
答案 0 :(得分:7)
没什么,真的。出口商最初被设想作为基类工作;后来它被增强,允许您只导入其导入方法。现在没有理由继承它。
如果您正在编写可能与Perl 5.8.2及更早版本一起使用的代码,则应该需要足够版本的Exporter:
use Exporter 5.57 'import';
答案 1 :(得分:6)
use Exporter 'import'
适用于Exporter 5.57+,自Perl 5.8.3以来已与Perl捆绑在一起。如果您需要支持与早期版本的Perl捆绑在一起的旧版Exporter,那么您应该从Exporter继承。
(Exporter是一个双生命模块,因此旧版Perl的用户可以在技术上升级Exporter而无需升级所有Perl;但是cpan
工具的旧版本有时会出现升级双生命模块的问题,所以升级出口商可能对他们来说可能很棘手。)
如果您不关心Perl的过时版本,请务必使用use Exporter 'import'
。 Exporter并不是真正以面向对象/类的方式编写的,因此没有真正的理由继承它。 (与我自己的导出器模块不同,Exporter::Tiny设计时考虑了继承/覆盖!)