2012-01-17 9 views
8

私は、環境変数PERL5LIBを設定しているのlib /は/ usr/local/perlののPerlモジュールの使用

に自分のPerlモジュールを作成しようとしています:私はモジュールを作成する場合

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

を:$ PERL5LIB /マイ/ 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; 

ModuleTest.pm:

私は私のモジュールがインストールディレクトリからそれらを分離するためのライブラリパスとして$ PERL5LIBを使用したい
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; 

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 
. 
+0

にあなたのモジュールの最初の行は奇妙に思える:私の$テスト=新しいマイ:: ModuleTest。 –

+2

Oyvind:Perlの狂信派の多くは、特定の落とし穴を避けるために 'my $ test = My :: ModuleTest-> new();'を使うよう勧めています。 – Konerak

答えて

10

は、ファイルModuleTest.pmpackage My::ModuleTest;を試してみてください - あなたは完全な名前を使用する必要があります。

+0

あなたは、勝者です! – Mose

+1

ありがとうございます。偉大な質問btw - すべての必要な情報がそこにあった、あなたが試したすべてを示してきた、状況を再現することができ、完璧なフォーマット...あなたは速い回答に値する:] – Konerak

+0

最後の質問は、 PERL5LIB env変数か、パスの一部として/ usr/local/lib/perlを探しますか? – Mose

3

変更

package ModuleTest; 

から

package My::ModuleTest; 
関連する問題