2012-01-17 17 views
8

Estoy tratando de crear mi propio módulo de Perl en// local/lib usr/PerlMódulo Perl uso

tengo la variable ambiental PERL5LIB establecido:

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

Si creo un módulo: $ PERL5LIB/Mi/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; 

Quiero usar los $ PERL5LIB como la ruta de la biblioteca de mis módulos para segregar desde el directorio de instalación.

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

parece extraño: mi $ test = new Mi :: ModuleTest; –

+2

Oyvind: Funciona, aunque la mayoría de los fanáticos de Perl te aconsejarán que uses 'my $ test = My :: ModuleTest-> new();' para evitar ciertos inconvenientes. – Konerak

Respuesta

10

Trate package My::ModuleTest; en su archivo ModuleTest.pm - que debe usar el nombre completo.

+0

¡Usted señor, es triunfo! – Mose

+1

Gracias. Gran pregunta por cierto: toda la información necesaria estaba allí, has mostrado todo lo que has intentado, nos has permitido recrear la situación, con un formato perfecto ... mereces respuestas rápidas:] – Konerak

+0

Una última pregunta, ¿es necesario que root tenga el Variable de env PERL5LIB o ¿se verá a/usr/local/lib/perl como parte de su ruta? – Mose

3

Cambiar la primera línea de su módulo de

package ModuleTest; 

a

package My::ModuleTest; 
Cuestiones relacionadas