2010-01-21 29 views

Trả lời

8

Đã có standard Config module, vì vậy hãy chọn một tên khác.

Giả sử bạn có MyConfig.pm với các nội dung sau:

package MyConfig; 

our $Foo = "bar"; 

our %Baz = (quux => "potrzebie"); 

1; 

Sau đó các module khác có thể sử dụng nó như trong

#! /usr/bin/perl 

use warnings; 
use strict; 

use MyConfig; 

print "Foo = $MyConfig::Foo\n"; 

print $MyConfig::Baz{quux}, "\n"; 

Nếu bạn không muốn để đủ điều kiện đầy đủ tên, sau đó sử dụng tiêu chuẩn Exporter mô-đun thay thế.

Thêm ba dòng để MyConfig.pm:

package MyConfig; 

require Exporter; 
our @ISA = qw/ Exporter /; 
our @EXPORT = qw/ $Foo %Baz /; 

our $Foo = "bar"; 

our %Baz = (quux => "potrzebie"); 

1; 

Bây giờ tên gói đầy đủ là không còn cần thiết:

#! /usr/bin/perl 

use warnings; 
use strict; 

use MyConfig; 

print "Foo = $Foo\n"; 

print $Baz{quux}, "\n"; 

Bạn có thể thêm một chỉ đọc SCALAR để MyConfig.pm với

our $READONLY; 
*READONLY = \42; 

Điều này được ghi lại trong perlmod.

Sau khi thêm nó vào @MyConfig::EXPORT, bạn có thể thử

$READONLY = 3; 

trong một mô-đun khác nhau, nhưng bạn sẽ nhận được

Modification of a read-only value attempted at ./program line 12.

Là một thay thế, bạn có thể tuyên bố trong MyConfig.pm hằng sử dụng constant và sau đó xuất các mô-đun đó.

+2

Thay vì kế thừa từ 'Trình xuất', bạn có thể chỉ cần lấy phương thức' nhập', đó là tất cả những gì bạn thực sự cần. ví dụ. 'use Exporter 'import';' – friedo

4

Không sử dụng các biến toàn cục cho cấu hình và không cấu hình sotre làm mã. Tôi có toàn bộ chương trong số Mastering Perl về việc này.

Thay vào đó, hãy tạo một lớp cấu hình mà bất kỳ gói nào khác có thể sử dụng để truy cập dữ liệu cấu hình. Nó sẽ dễ dàng hơn nhiều trong thời gian dài để cung cấp một giao diện cho một cái gì đó bạn có thể muốn thay đổi sau khi đối phó với tính nuttiness bạn khóa mình vào bằng cách phân tán các tên biến bạn phải hỗ trợ cho phần còn lại của cuộc sống của bạn.

Giao diện cấu hình cũng mang lại cho bạn lợi ích khi soạn câu trả lời mới cho các câu hỏi cấu hình bằng cách kết hợp các bit đúng của dữ liệu cấu hình thực tế. Bạn ẩn tất cả những điều đó đằng sau một phương thức và các cấp cao hơn không phải xem nó được triển khai như thế nào. Ví dụ:

print "Hello!" unless $config->be_silent; 

Câu trả lời be_silent có thể được kích hoạt vì nhiều lý do mã cấp cao hơn không cần biết. Nó có thể là từ một chuyển đổi người dùng, rằng chương trình phát hiện nó không tương tác, và như vậy. Nó cũng có thể được lật bởi các tùy chọn như một công tắc gỡ lỗi, ghi đè tất cả các tùy chọn khác.Không có vấn đề gì bạn quyết định, dòng mã đó không thay đổi bởi vì tuyên bố đó chỉ quan tâm đến câu trả lời, không phải cách bạn nhận được câu trả lời.

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