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

2 perl inheritance

我有一个模块说 Foo.pm

package Foo; 
sub new {
}    
sub SomeMethod {
}
1;
Run Code Online (Sandbox Code Playgroud)

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

package Foo::Bar;
use base Foo;
use Foo; 
sub SomeMethod {
}
1;
Run Code Online (Sandbox Code Playgroud)

现在我们需要使用

use base Foo;
use Foo;
Run Code Online (Sandbox Code Playgroud)

要不就

use base Foo;
Run Code Online (Sandbox Code Playgroud)

会做两件事.

如果我们需要使用 use Foo;

它有什么不同?

ike*_*ami 5

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

BEGIN {
    require Module;
    push @ISA, 'Module';
}
Run Code Online (Sandbox Code Playgroud)

use Module;另一方面,将导入模块的默认导出*.它类似于

BEGIN {
    require Module;
    Module->import();
}
Run Code Online (Sandbox Code Playgroud)

因此,除非您要从模块导入,否则不需要use Foo;以下内容use base 'Foo';.


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