2012-01-17 3 views
8

Я пытаюсь создать свой собственный модуль Perl в/USR/местные/Библиотека/PerlPerl использование

Я имею переменную окружения 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; 

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

Кажется странным: мой $ тест = новый My :: ModuleTest; –

+2

Oyvind: Он работает, хотя большинство фанатиков Perl посоветуют вам использовать 'my $ test = My :: ModuleTest-> new();', чтобы избежать определенных ошибок. – Konerak

ответ

10

package My::ModuleTest; Попробуйте в файле ModuleTest.pm - вы должны использовать полное имя.

+0

Вы, сэр, выиграли! – Mose

+1

Спасибо. Отличный вопрос btw - вся необходимая информация была там, вы показали все, что вы пробовали, позволили нам воссоздать ситуацию, отлично отформатированы ... вы заслуживаете быстрых ответов:] – Konerak

+0

Последний вопрос, необходимо, чтобы root имел PERL5LIB env или будет ли он выглядеть как/usr/local/lib/perl как часть его пути? – Mose

3

Изменение первой линии модуля от

package ModuleTest; 

в

package My::ModuleTest; 
Смежные вопросы