【问题标题】:Creating Packages With Perl使用 Perl 创建包
【发布时间】:2011-08-25 17:49:50
【问题描述】:

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

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

【问题讨论】:

  • 回滚,因为Mine::MyModule 更改为MyModule 时问题没有意义

标签: perl module package packages perl-module


【解决方案1】:

你的包名和你的使用名不匹配。如果您的模块位于名为 Mine 的文件夹中,那么您需要相应地命名您的包:

package Mine::MyModule

如果您在该文件夹中没有它,那么您需要从您的 use 呼叫中删除它

use MyModule

【讨论】:

  • 哇!现在我傻了。谢谢。顺便说一句,它在被编辑之前在 Mine 目录中。
【解决方案2】:

应该是

package Mine::MyModule;

而且它应该在 Perl/site/lib 下的 Mine 目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2011-05-18
    • 2019-11-10
    • 2019-12-14
    • 2010-11-29
    • 2010-11-29
    • 2016-01-30
    相关资源
    最近更新 更多