如果已经存在“使用基础”声明,是否需要使用“使用”

时间:2012-12-10 07:10:53

标签: 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;

它有什么不同?

1 个答案:

答案 0 :(得分:5)

如果需要,

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

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

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

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

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


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