使用Perl创建包

时间:2011-08-24 14:47:45

标签: perl module package packages perl-module

我制作第一个简单的套装时似乎遇到了很多麻烦(实际上这是我的第一个套餐期)。我正在做我应该做的一切(我想)但它仍然无法正常工作。这是包(我想你可以称之为模块):

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;

我在Perl/site/lib中将此模块保存为MyModule(是的,它保存为.pm文件)(这是我存储的所有非内置模块的地方)。然后我尝试使用Perl脚本中的这个模块:

use strict;
use warnings;

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 Mine::MyModule qw(&func1 &func2);
print func1(@list),"\n";
print func2(@list),"\n";

我将其保存为my.pl。然后我运行my.pl并收到此错误:

Undefined subroutine &main::func1 called at C:\myperl\examplefolder\my.pl line 7.

有人可以解释为什么会这样吗?提前谢谢!

注意 是的我的例子来自Perl Monks。见the Perl Monks "Simple Module Tutorial"。谢谢tachyon

2 个答案:

答案 0 :(得分:3)

您的包裹名称和使用名称不匹配。如果您将模块放在名为Mine的文件夹中,则需要相应地命名您的包:

package Mine::MyModule

如果您没有该文件夹,则需要将其从use电话中移除

use MyModule

答案 1 :(得分:2)

应该是

package Mine::MyModule;

它应该位于Perl / site / lib下的Mine目录中。