2011-08-24 13 views
6

Tôi dường như gặp nhiều rắc rối khi tạo Gói đầu tiên, đơn giản của tôi (thực ra đây là gói thời gian đầu tiên của tôi). Tôi đang làm mọi thứ tôi nên làm (tôi nghĩ) và nó vẫn không hoạt động. Dưới đây là các gói (tôi đoán bạn có thể gọi nó là một Module):Tạo các gói với Perl

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; 

tôi lưu module này như MyModule (có, nó được lưu dưới dạng file .pm) trong Perl/site/lib (đây là nơi mà tất cả các module của tôi không được tích hợp sẵn được lưu trữ). Sau đó, tôi đã cố gắng sử dụng mô-đun này quán trọ một kịch bản 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"; 

Tôi lưu này là my.pl. Sau đó, tôi chạy my.pl và nhận được lỗi này:

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

Ai đó có thể vui lòng giải thích lý do điều này xảy ra? Cảm ơn trước!

Note: Có ví dụ của tôi là từ Perl Monks. Xem the Perl Monks "Simple Module Tutorial". Cảm ơn bạn tachyon!

+0

Được cuộn lại vì câu hỏi không có ý nghĩa với 'Mine :: MyModule' đã thay đổi thành' MyModule' – Zaid

Trả lời

3

Tên gói và tên sử dụng của bạn không khớp. Nếu bạn có mô-đun của bạn trong một thư mục có tên Mine thì bạn cần phải đặt tên cho gói của bạn cho phù hợp:

package Mine::MyModule

Nếu bạn không có nó trong thư mục đó thì bạn cần phải loại bỏ từ use cuộc gọi của bạn

use MyModule

+0

WOW! Bây giờ tôi đã ngã ngu ngốc. Cảm ơn. Nhân tiện, nó nằm trong thư mục Mine trước khi nó được chỉnh sửa. – Dynamic

2

nó phải là

package Mine::MyModule; 

Và nó shoul d nằm trong thư mục Mine dưới Perl/site/lib.

+0

Cảm ơn bạn rất nhiều. – Dynamic