perl - 如果已经有 'use'语句,是否需要使用 'use base'

标签 perl inheritance

我有一个模块Foo.pm

package Foo; 
sub new {
}    
sub SomeMethod {
}
1;

然后是一个子类,Foo::Bar Foo/Bar.pm

package Foo::Bar;
use base Foo;
use Foo; 
sub SomeMethod {
}
1;

现在我们需要使用

use base Foo;
use Foo;

或者只是

use base Foo;

两者都会做。

此外,如果我们需要使用use Foo;

它有什么不同?

最佳答案

use base Module; 如果需要,将始终加载包,但不会从中导入。类似于

BEGIN {
    require Module;
    push @ISA, 'Module';
}
另一方面,

use Module; 将导入模块的默认导出*。类似于

BEGIN {
    require Module;
    Module->import();
}

因此,除非您想从模块导入,否则不需要 use base 'Foo'; 之后的 use Foo;


* — 从技术上讲,如果模块定义了这样的方法,它只会调用不带参数的 import 。我所描述的是 import 方法的正常行为。

关于perl - 如果已经有 'use'语句,是否需要使用 'use base',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796486/

相关文章:

mysql - 尝试在父级下获取 perl 输出 json 数据

bash - 从 XML 文件中删除特定的重复行

Perl 并行 Mechanize 多个网页

c++ - 设计模式 : Should I use inheritance here?

.net - 制作你自己的 "int"或 "string"类

c - 汉字UTF-8宽度显示问题

arrays - 哈希数组元素复制

java - 跳过继承树中的类实现

ASP.NET 自定义网页控件样式 渲染样式规则

python - dict value 和 items 使用什么内部函数,以及如何覆盖它们?