2011-08-24 22 views
6

Wydaje mi się, że mam problem z zrobieniem pierwszego, prostego pakietu (w rzeczywistości jest to mój pierwszy pakiet). Robię wszystko, co powinienem robić (chyba) i nadal nie działa. Oto pakiet (myślę, że można nazwać to moduł):Tworzenie pakietów za pomocą Perla

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; 

Uratowałem ten moduł jako mymodule (tak, to był zapisany jako plik .pm) w Perl/site/lib (to jest, gdy wszystkie moje modułów które nie są wbudowane są przechowywane). Potem próbowałem za pomocą tego modułu inn skrypt 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"; 

zapisać to jako my.pl. Następnie uruchamiam my.pl i otrzymuję komunikat o błędzie:

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

Czy ktoś może wyjaśnić, dlaczego tak się dzieje? Z góry dziękuję!

Uwaga: Tak moi przykłady były z Perl Monks. Zobacz the Perl Monks "Simple Module Tutorial". Dziękujemy tachyon!

+0

Odsunął się, ponieważ pytanie nie miało sensu, gdy 'Mine :: MyModule' zmieniono na' MyModule' – Zaid

Odpowiedz

3

Twoja nazwa pakietu i nazwa użycia nie pasują do siebie. Jeśli masz swój moduł w folderze o nazwie Mine to trzeba nazwać swój pakiet odpowiednio:

package Mine::MyModule

Jeśli nie ma go w tym folderze to trzeba usunąć, że od rozmowy use

use MyModule

+0

WOW! Teraz jestem głupi. Dzięki. Nawiasem mówiąc, był w katalogu Mine, zanim został poddany edycji. – Dynamic

2

powinno być

package Mine::MyModule; 

I shoul d być w katalogu Mine pod Perl/site/lib.

+0

Dziękuję bardzo. – Dynamic

Powiązane problemy