2012-03-10 13 views
8

Mam moduł nazwany Helpers.pm:Dlaczego pojawia się komunikat o błędzie "Niezdefiniowany podprogram" podczas wywoływania funkcji z modułu?

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; 

połączenia go w skrypcie:

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

i mam żadnych wiadomości od błędów. Ale kiedy mogę umieścić moduł w katalogu TestDir zmodyfikować skrypt tak:

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

mam tego błędu wiadomość:

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

Dlaczego mam tego błędu wiadomość?

Odpowiedz

14

Pewnie zapomniał zmienić deklarację pakietu z

package Helpers; 

do:

package TestDir::Helpers; 
+0

+1: To bardzo prawdopodobny problem. Wydaje się, że wszystko inne zostało zmienione poprawnie. – Borodin

3

Myślę, że to dlatego, że nie może znaleźć twojego modułu na ścieżce biblioteki, http://perldoc.perl.org/lib.html.

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

Przypuszczam, w tym przypadku komunikat błędu byłoby coś takiego: 'Nie można zlokalizować ... '. –

+0

Testowałem to przed pocztą. właściwie to działa. –

+0

Dobrze, źle odczytałem twój wpis. –

Powiązane problemy