2012-03-10 8 views
8

que tienen un módulo denominado Helpers.pm:¿Por qué aparece el mensaje de error "Subrutina no definida" cuando llamo a una función desde un módulo?

use warnings; 
use 5.012; 

package Helpers; 
use Exporter qw(import); 
our @EXPORT_OK = qw(my_function); 

sub my_function { 
    return { one => 1, two => 2 }; 
} 

1; 

una llamada en el guión:

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use Data::Dumper; 
use FindBin qw($RealBin); 

use lib $RealBin; 
use Helpers qw(my_function); 

my $ref = my_function(); 
say Dumper $ref; 

y me da ningún error-mensajes. Pero cuando pongo el módulo en el directorio TestDir un modifique el script como el siguiente:

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use Data::Dumper; 
use FindBin qw($RealBin); 

use lib $RealBin; 
use TestDir::Helpers qw(my_function); 

my $ref = my_function(); 
say Dumper $ref; 

consigo este error mensaje:

Undefined subroutine &main::my_function called at ./perl.pl line 10. 

¿Por qué aparece este mensaje-error?

Respuesta

14

Probablemente se olvidó de cambiar la declaración del paquete de

package Helpers; 

a:

package TestDir::Helpers; 
+0

+1: Este es muy probable el problema. Todo lo demás parece haber sido cambiado correctamente. – Borodin

3

Creo que es porque no puede encontrar su módulo en la ruta de la lib, http://perldoc.perl.org/lib.html.

use lib 'TestDir'; 
use Helpers qw(my_function); 
+0

supongo que en este caso el mensaje de error sería algo así como: 'No se puede encontrar ... '. –

+0

Lo probé antes de la publicación. en realidad, funciona. –

+0

Ok, leí mal tu publicación. –

Cuestiones relacionadas