2012-03-10 5 views
8

Ho un modulo chiamato Helpers.pm:Perché viene visualizzato il messaggio di errore "Sottoprogramma non definito" quando si chiama una funzione da un modulo?

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; 

un chiamarlo nello script:

#!/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; 

e non ottengo messaggi d'errore. Ma quando ho messo il modulo nella directory TestDir un modificare lo script come questo:

#!/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; 

ottengo questo errore-messaggio:

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

Perché ricevo questo errore-messaggio?

risposta

14

Probabilmente ha dimenticato di modificare la dichiarazione pacchetto da

package Helpers; 

a:

package TestDir::Helpers; 
+0

+1: questo è molto probabilmente il problema. Tutto il resto sembra essere stato cambiato correttamente. – Borodin

3

penso che sia perché non riesce a trovare il modulo in lib path, http://perldoc.perl.org/lib.html.

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

Suppongo che in questo caso l'errore-messaggio sarebbe qualcosa di simile: 'Impossibile individuare ... '. –

+0

L'ho provato prima della pubblicazione. in realtà, funziona. –

+0

Ok, ho letto male il tuo post. –

Problemi correlati