2013-04-13 27 views
5

Tôi không chắc chắn nếu và những gì khác biệt nó làm cho nếu một sự khởi đầu một module perl vớiTôi có nên sử dụng "sử dụng 5.12.0; sử dụng cảnh báo"; trong một mô-đun perl?

package MYPACKAGE; 
use 5.12.0; 
use warnings; 

# functions are here 

1; 

hoặc

use 5.12.0; 
use warnings; 
package MYPACKAGE; 

# functions are here 

1; 

hoặc nếu những use ... không được coi ở tất cảuse ... được thừa kế từ tập lệnh perl đang gọi.

Câu hỏi có thể tóm tắt thành: có đáng để chỉ định các số use ... trong mô-đun hoặc là đủ nếu tôi đã chỉ định chúng trong tập lệnh perl của mình.

Trả lời

7

Mô-đun thực dụng có phạm vi từ vựng, không động.

Phiên bản pragma kích hoạt một số tính năng nhất định trong phạm vi hiện tại, tùy thuộc vào phiên bản. Nó không kích hoạt các tính năng này trên toàn cầu. Điều này rất quan trọng cho khả năng tương thích ngược.

Điều này có nghĩa rằng một pragma thể được kích hoạt bên ngoài của định nghĩa module, nhưng bên trong phạm vi của chúng tôi:

# this is package main 
use 5.012; # activates `say` 
package Foo; 
say "Hi"; # works, because lexical scope 

Đây là khác biệt so với hàng nhập khẩu thông thường được nhập khẩu vào gói hiện tại (= phạm vi!).

Pragma warnings kích hoạt cảnh báo bên trong phạm vi hiện tại.

Tuy nhiên, mọi tệp phải chứa use strict, vì phạm vi từ vựng không bao giờ trải dài trên các tệp. Pragmas không bắc cầu:

Foo.pm:

say "Hi"; 
1; 

main.pl:

use 5.012; 
require Foo; 

thất bại.


đâu chính xác bạn đặt những pragmas là như vậy, phần lớn là không thích hợp. Tôi khuyên bạn nên đặt các pragmas trước package khi bạn có nhiều không gian tên trong tệp, ví dụ:

use 5.012; use warnings; 

package Foo; 
...; 
package Bar; 
...; 
1; 

trước tiên, nhưng để đặt package đầu tiên nếu đó là tệp duy nhất trong tệp.

package Foo; 
use 5.012; use warnings; 
...; 
1; 

Điều quan trọng duy nhất là bạn làm use họ ;-)

+0

Có thể cho một module để sử dụng [ 'strict'] (http://perldoc.perl.org/strict.html "perldoc strict") và ['warnings'] (http://perldoc.perl.org/warnings.html" cảnh báo perldoc ") thay cho bạn. 'ví dụ gói; Sử dụng nghiêm ngặt; nhập khẩu phụ {strict-> import} 'Ví dụ: [Hiện đại :: Perl] (http://p3rl.org/Modern::Perl" perldoc Modern :: Perl ") –

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