2011-08-24 16 views
6

Parece que estoy teniendo muchos problemas para hacer mi primer y simple paquete (en realidad es mi primer período de paquete). Estoy haciendo todo lo que debería estar haciendo (creo) y todavía no está funcionando. Aquí está el paquete (supongo que se le puede llamar un módulo):Creación de paquetes con Perl

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; 

ahorré este módulo como MyModule (sí, se guarda como un archivo .pm) en Perl/site/lib (aquí es donde todos mis módulos que no están incorporados se almacenan). A continuación, he intentado usar esta posada módulo de un script de 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"; 

puedo guardar esto como my.pl. Luego ejecutar my.pl y sale este error:

Undefined subroutine &main::func1 called at C:\myperl\examplefolder\my.pl line 7. 

Por favor alguien puede explicar por qué sucede esto? ¡Gracias por adelantado!

Nota: Sí mis ejemplos eran de Perl Monks. Ver the Perl Monks "Simple Module Tutorial". ¡Gracias tachyon!

+0

Se recuperó porque la pregunta no tenía sentido con el 'Mine :: MyModule' cambiado a' MyModule' – Zaid

Respuesta

3

El nombre de su paquete y su nombre de uso no coinciden. Si usted tiene su módulo en una carpeta llamada Mine entonces usted necesita para nombrar su paquete en consecuencia:

package Mine::MyModule

Si no lo tienes en esa carpeta a continuación, hay que desmontar la que a partir de su llamada use

use MyModule

+0

¡GUAU! Ahora me caí estúpido. Gracias. Por cierto, estaba en el directorio de Mine antes de ser editado. – Dynamic

2

debe ser

package Mine::MyModule; 

Y Shoul d estar en el directorio de la mina en Perl/site/lib.

+0

Muchas gracias. – Dynamic

Cuestiones relacionadas