我正在尝试学习如何使用.pm文件。我创建了2个文件:
MyScript.pl
use strict;
BEGIN {
unshift(@INC,"./firstdir");
}
my @list = qw (J u s t ~ A n o t h e r ~ P e r l ~ H a c k e r !);
use seconddir::MyModule qw(func1) ;
print func1(@list),"\n"; #line 21
print MyModule::func2(@list),"\n";
MyModule.pm
package MyModule;
use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = ();
@EXPORT_OK = qw(func1 func2);
%EXPORT_TAGS = ( DEFAULT => [qw(&func1)],
Both => [qw(&func1 &func2)]);
sub func1 { return reverse @_ }
sub func2 { return map{ uc }@_ }
1;
目录的结构如下:
--------------- ------------ ---------------
| firstdir ---|------> |seconddir--|-> | MyModule.pm |
| MyScript.pl | ------------ ---------------
---------------
注意:firstdir和seconddir是目录
当我运行命令Perl MyScript.pl
时,我收到以下错误:
Undefined subroutine &main::func1 called at MyScript.pl line 21
你可以帮我弄清楚出了什么问题吗?
答案 0 :(得分:2)
您的包裹名称错误,应该是:
package seconddir::MyModule
然后你应该用:{/ p>打电话给func2
print seconddir::MyModule::func2(@list),"\n";
或导出它,与func1
一样。
答案 1 :(得分:1)
func1
,则 @EXPORT
应位于MyModule.pm模块的func1
数组中。
答案 2 :(得分:0)
@EXPORT = qw(func1 func2);
您需要在@EXPORT
数组中添加符号的名称,以便从您的脚本中访问它们。