2012-11-15 26 views
6

Các tập lệnh perl chứa tất cả các tên mô-đun trong phần đầu của tập lệnh.Cách bao gồm một tệp có chứa tất cả các tên mô-đun Perl được yêu cầu?

Ex:

use strict; 
use XML::Parser; 
use XML::Simple; 
use DBI; 
use DBD::DB2::Constants; 
use POSIX qw(strftime); 
use Storable qw(dclone); 
use Data::Dumper; 
use Carp; 

Làm thế nào để giữ cho tất cả các tên mô-đun trong tập tin khác và bao gồm các tập tin trong kịch bản perl chính?

Cảm ơn.

+0

Trước đây: http://stackoverflow.com/questions/437785/is-there-a-way-to-use-a-single-file-that-in-turn-uses-multiple-others-in-perl http://stackoverflow.com/questions/4919625/perl-how-to-share-the-import-of-a-large-list-of-modules-between-many-independen http://stackoverflow.com/questions/6412799/perl-how-to-make-use-mydefaults-với-hiện đại-perl-utf8-defaults – daxim

Trả lời

6

Tạo mô-đun của riêng bạn. Tuy nhiên, nếu nếu bạn thực hiện gói trong mô-đun này, strftime v.v ... sẽ được nhập vào một không gian tên khác. Bạn có thể làm litle hack để làm smiple này:

MyModules.pm:

use strict; 
use XML::Parser; 
use XML::Simple; 
use DBI; 
use DBD::DB2::Constants; 
use POSIX qw(strftime); 
use Storable qw(dclone); 
use Data::Dumper; 
use Carp; 

Lưu ý không có package từ khóa trong .pm này. Kịch bản của bạn:

use MyModules; 

Nơi .pm này vào cùng thư mục với kịch bản hoặc thêm các module đường dẫn tìm kiếm trong thời gian chạy:

use lib '/my_modules_dir/'; 
use MyModules; 

Sử dụng làmđòi hỏi lệnh không được khuyến khích, vì chúng không kiểm tra cú pháp khi bắt đầu tập lệnh. Chắc chắn bạn có thể đặt chúng vào BEGIN khối nhưng tôi nghĩ rằng cách khéo léo của mình và thường BEGIN{ require ..} cũng giống như use

UPD: Ikegami lưu ý vấn đề của nó không hoạt động khi bạn sử dụng này từ nhiều mô-đun. Bất kể thông tin của người bắt đầu câu hỏi (anh ấy muốn sử dụng thông tin này từ tập lệnh chính), hãy thêm thông tin về cách sử dụng từ nhiều mô-đun, vì vậy bạn tôi có thể cảm thấy tốt hơn. Thêm vào cuối MyModules.pm:

delete $INC{'MyModules.pm'}; 
1; 
+1

Thực tế 'sử dụng' khi tệp không chứa gói kết thúc bằng' do' trong 'BEGIN'. Sự khác biệt mà 'use' sẽ thực hiện kiểm tra cho bạn. Và, như trong trường hợp với câu trả lời của choroba, bạn sẽ chỉnh sửa bình luận/nắm bắt các lỗi với những thứ đơn giản như lệnh 'do'. – PSIAlt

+0

@ikegami yes, ** use ** sẽ cho kết quả ** yêu cầu ** mà chính nó sẽ gọi ** do ** sau khi kiểm tra mô-đun đó chưa được tải. Và anh ấy muốn đưa vào từ kịch bản chính. – PSIAlt

+0

@ikegami tất cả mọi thứ cho bạn, người bạn stackoverflow tốt nhất của tôi. – PSIAlt

7

Bạn có thể sử dụng

BEGIN { do 'filename.pl' or die [email protected] } 

Xem do. Hãy chắc chắn bao gồm 1; ở cuối tệp.

+1

Nó sẽ không bật nghiêm ngặt, nhưng nó sẽ xử lý các nhà xuất khẩu. – ikegami