Perl 特殊处理Base.pm?
我在想要使用它的Perl程序所在的目录中创建了一个名为Base.pm的模块,但该模块似乎没有加载。将模块的名称更改为Base以外的任何名称,一切正常。Base.pm有什么特别之处?如何覆盖此行为?谢谢你的洞察力Perl 特殊处理Base.pm?,perl,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(Expor
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;
与
屈服
Undefined subroutine &main::func called at test0.pl line 2.
foo.
鉴于
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;
与
屈服
Undefined subroutine &main::func called at test0.pl line 2.
foo.
是现在的核心系统pragma模块,它不推荐用于
可能是Windows机箱的问题。Perl查找Base.pm,但windows返回Base.pm。当您将它命名为Base以外的任何名称时,您可能没有将它重命名为另一个Perl模块
检查此问题的一种方法是运行以下程序:
使用
打印%INC的转储文件,并打印所有加载模块及其加载位置的映射
use Data::Dumper;
...
use Base;
...
print Dumper( \%INC );
查找'base.pm'或'base.pm'以查看加载了什么Perl。是当今的核心系统pragma模块,它不推荐用于
可能是Windows机箱的问题。Perl查找Base.pm,但windows返回Base.pm。当您将它命名为Base以外的任何名称时,您可能没有将它重命名为另一个Perl模块
检查此问题的一种方法是运行以下程序:
使用
打印%INC的转储文件,并打印所有加载模块及其加载位置的映射
use Data::Dumper;
...
use Base;
...
print Dumper( \%INC );
查找'base.pm'或'base.pm'以查看Perl加载的内容。检查以查看实际加载的内容:
use Base;
print $INC{'Base.pm'};
产出:
/Users/miller/perl5/perlbrew/perls/perl-5.20.0/lib/5.20.1/Base.pm
我在一个不区分大小写的OSX分区上,所以这个文件对应于pragma
为了避免此类问题,请为项目提供一个私有名称空间。这样,与当前或未来的Perl Core或CPAN模块冲突的风险就更小了:
package MyProject::Base;
检查以查看实际加载的内容:
use Base;
print $INC{'Base.pm'};
产出:
/Users/miller/perl5/perlbrew/perls/perl-5.20.0/lib/5.20.1/Base.pm
我在一个不区分大小写的OSX分区上,所以这个文件对应于pragma
为了避免此类问题,请为项目提供一个私有名称空间。这样,与当前或未来的Perl Core或CPAN模块冲突的风险就更小了:
package MyProject::Base;
虽然不是复制品,但与您的情况相关。虽然不是复制品,但与您的情况相关。