2012-03-10 26 views
8

Bir modül Helpers.pm adında var:Modülden bir işlevi çağırırken neden "Undefined subroutine" hata mesajını alıyorum?

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; 

bir komut diyoruz:

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

ve hiçbir hata iletileri alabilirsiniz. Ama dizinde TestDir modülü koyduğunuzda bir böyle senaryoyu değiştirin: Bu hata mesajı alıyorum Neden

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

: Bu hata mesajı alıyorum

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

?

cevap

14

Muhtemelen

package Helpers; 

ila paket beyanı değiştirmek için unuttum `bulunamıyor ... `.

+0

+1: Bu büyük olasılıkla problem. Her şey doğru şekilde değiştirilmiş gibi görünüyor. – Borodin

3

Bunun nedeni, modülünüzü lib yolunda bulamıyor olmasıdır, http://perldoc.perl.org/lib.html. Ben hata mesajı gibi bir şey olurdu bu durumda herhalde

package TestDir::Helpers; 
+0

:

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

+0

Göndermeden önce test ettim. aslında işe yarıyor. –

+0

Tamam, yayınınızı yanlış okuyorum. –

İlgili konular