2010-08-03 21 views
5

Tôi có một tập lệnh Perl (chương trình độc lập) có chứa một số đăng ký mà tôi muốn sử dụng lại trong các tập lệnh khác. Do những hạn chế của môi trường thực hiện, tôi không thể di chuyển các hàm đến một tệp tin phổ biến .pm.Kịch bản Perl có thể sử dụng làm chương trình và làm mô-đun

Có thể phân biệt được liệu tập lệnh có được chạy dưới dạng chương trình độc lập hay là require ed/do do tập lệnh khác biên soạn?

Điều duy nhất tôi có thể tìm thấy là sử dụng caller ở cấp cao nhất: chương trình độc lập không có bất kỳ người gọi nào trong khi khi require ed caller hiển thị những người đã tải mô-đun. Có giải pháp nào tốt hơn không?

+0

Tôi đã đăng câu trả lời bên dưới, nhưng nếu bạn có thể giải thích về "những hạn chế của môi trường thực thi", có thể có những cách xung quanh những hạn chế đó sẽ cho phép bạn sử dụng các mô-đun thích hợp? Thx – DVK

+0

@DVK: Tôi thực sự hài lòng với câu trả lời của bạn. (Cả cú pháp của người gọi() của tôi đều tốt như trong phản hồi của bạn.) Về giới hạn. Thực sự khá ngớ ngẩn: Tôi không thể thêm một mô-đun không thể thực thi khác vào thư mục vì nó được quét cho các tệp và tất cả các tên tệp có ý nghĩa đặc biệt. Thêm .pm có các đoạn mã khác mà tôi không được phép sửa đổi. – Dummy00001

+1

Theo @FM, câu hỏi của tôi về bản chất là một sự lừa đảo của http://stackoverflow.com/questions/1131304/ – Dummy00001

Trả lời

9

Có, cách tiếp cận caller của bạn là chính xác - đây là kỹ thuật có tên "modulinos" theo brian d foy. Tôi đoán rằng brian đã phát minh ra nó trừ khi ai đó khai sáng tôi ngược lại.

Các bộ phận làm việc chính của modulino trông như thế này (từ câu trả lời SO liên kết dưới đây):

__PACKAGE__->run(@ARGV) unless caller; 
sub run { 
    my($class, @args) = @_; 
} 
1; 

Dưới đây là một vài tài liệu tham khảo:

"Modules as Programs" chapter from "Mastering Perl" book by brian d foy

"Scripts as Modules" article in Dr. Dobbs

"How a script becomes a module" article on perlmonks

What should I put in my starter template for my Perl programs?

+1

+1 Câu hỏi có liên quan: http://stackoverflow.com/questions/1215657. – FMc

+1

Tom Christiansen (tôi nghĩ) đặt ra thuật ngữ progmod trong nhiều năm trước khi "modulino" – ysth

+1

Tôi không phát minh ra kỹ thuật này. Tom C. là người đầu tiên tôi nhìn thấy. Tôi vừa phổ biến nó. –

Các vấn đề liên quan