Base.pm的特殊处理?

use*_*346 1 perl

我在与要使用它的Perl程序相同的目录中创建了一个名为Base.pm的模块,但似乎没有加载模块.将模块的名称更改为除Base之外的任何内容,并且工作正常.Base.pm有什么特别之处,如何覆盖这种行为?感谢您的任何见解.

package Base;
use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = qw(func);
sub func { return "foo"; }
1;
Run Code Online (Sandbox Code Playgroud)

use Base;
print func();
Run Code Online (Sandbox Code Playgroud)

产量

Undefined subroutine &main::func called at test0.pl line 2.
Run Code Online (Sandbox Code Playgroud)

package Case;
use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = qw(func);
sub func { return "foo"; }
1;
Run Code Online (Sandbox Code Playgroud)

use Case;
print func();
Run Code Online (Sandbox Code Playgroud)

产量

foo.
Run Code Online (Sandbox Code Playgroud)

Axe*_*man 8

base.pm是一个核心系统"pragma"模块(现在,它已被弃用parent.pm)

use base 'MyBaseClass'; # Same as: our @ISA = ( 'MyBaseClass' );
Run Code Online (Sandbox Code Playgroud)

这可能是一个Windows案例.Perl查找" Base.pm",但窗口返回" base.pm".当你将它命名为"除Base之外的任何东西"时,你可能没有将它重命名为另一个Perl模块.

您可以检查此方法的一种方法是运行以下命令:

寻找'base.pm''Base.pm'看看Perl加载了什么.