Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 特殊处理Base.pm?_Perl - Fatal编程技术网

Perl 特殊处理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

我在想要使用它的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;

屈服

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;
虽然不是复制品,但与您的情况相关。虽然不是复制品,但与您的情况相关。