【问题标题】:Perl Module usagePerl 模块使用
【发布时间】:2012-02-12 07:30:30
【问题描述】:

我正在尝试在 /usr/local/lib/perl 中创建自己的 Perl 模块

我设置了环境变量 PERL5LIB:

$ env | grep PERL
PERL5LIB=/usr/local/lib/perl

如果我创建一个模块:$PERL5LIB/My/ModuleTest.pm

$ ./test.pl 
Can't locate object method "new" via package "My::ModuleTest" (perhaps you forgot to load "My::ModuleTest"?) at ./test.pl line 8.

test.pl:

#!/usr/bin/perl

use strict;
use warnings;
use My::ModuleTest;

my $test = new My::ModuleTest;
print $test->check;

模块测试.pm:

package ModuleTest;

use strict;
use warnings;

sub new {
        my $class = shift;
        my ($opts)= @_;
        my $self = {};
        $self->{test} = "Hello World";

        return bless $self, $class;
}
sub check {
        my $self = shift;
        my ($opts) = @_;

        return $self->{test};
}
1;

我想使用 $PERL5LIB 作为我的模块的库路径,以便将它们与安装目录隔离。

Perl @INC:

$ perl -le 'print foreach @INC'
/usr/local/lib/perl
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/5.8.8
.

【问题讨论】:

  • 看起来很奇怪:我的 $test = new My::ModuleTest;
  • Oyvind:它有效,但大多数 Perl 狂热分子会建议您使用 my $test = My::ModuleTest->new(); 以避免某些陷阱。

标签: perl perl-module


【解决方案1】:

在您的文件ModuleTest.pm 中尝试package My::ModuleTest; - 您应该使用全名。

【讨论】:

  • 谢谢。顺便说一句,很好的问题 - 所有必要的信息都在那里,你已经展示了你尝试过的一切,让我们重新创造了这种情况,完美的格式......你应该得到快速的答案:]
  • 最后一个问题,root 是否有必要拥有 PERL5LIB 环境变量,还是将 /usr/local/lib/perl 作为其路径的一部分?
  • @user196096:很好的问题 - 这就是为什么someone else on stackoverflow already asked it (link),它也得到了回答! :]
【解决方案2】:

更改模块的第一行

package ModuleTest;

package My::ModuleTest;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多