我是Perl的新手,我面临以下问题,不知道为什么跟随不起作用。
我的Perl模块包含:
package PACK2;
use Exporter;
@ISA = ('Exporter');
@EXPORT_OK=('whom');
sub why(){
print "why\n";
}
sub whom(){
print "whom\n";
}
1;
我的Perl文件包含:
#!/usr/bin/perl -w
use pack;
use pack2 ('whom');
PACK::who();
&whom();
我运行此程序但找不到whom
:
perl use_pack_pm.pl
who
Undefined subroutine &main::whom called at use_pack_pm.pl line 7.
答案 0 :(得分:8)
Perl是一种区分大小写的语言。我不认为模块“pack2”和“PACK2”是相同的。 (但我实际上没有测试过这个。)
答案 1 :(得分:5)
内部use pack2 ('whom');
被翻译为类似
BEGIN {
require pack2;
pack2->import('whom');
}
除非perl会在尝试调用它之前检查它是否可以在import
上调用pack2
。
在您的示例中,没有名为pack2
的包,因此没有import
函数可以调用。
如果您的包名称和文件名匹配,则perl会找到import
提供的Exporter
函数。
没有任何警告,因为Perl很难说这是故意这样做的。
大多数OO模块不会导出任何函数或变量,因此它们不会提供import
函数。
答案 2 :(得分:0)
使用子文件夹树中的模块得到相同的错误,而不在包中声明完整路径。
您应该使用其路径编写package语句。
对于位于子目录Dir
中的模块,请写package Dir::Module;
,而不是package Module ;
。然后就行了。