Về cốt lõi, phần mở rộng tệp bạn sử dụng không có gì khác biệt về cách perl
diễn giải các tệp đó.
Tuy nhiên, việc đặt các mô-đun trong .pm
các tệp theo một cấu trúc thư mục nhất định theo sau tên gói cung cấp một sự tiện lợi. Vì vậy, nếu bạn có một mô-đun Example::Plot::FourD
và bạn đặt nó trong một thư mục Example/Plot/FourD.pm
trong một đường dẫn trong của bạn @INC
, thì use
và require
sẽ thực hiện đúng khi được cung cấp tên gói như trong use Example::Plot::FourD
.
Tệp phải trả về true như câu lệnh cuối cùng để chỉ ra việc thực thi thành công bất kỳ mã khởi tạo nào, vì vậy, thông thường sẽ kết thúc tệp như vậy 1;
trừ khi bạn chắc chắn rằng nó sẽ trả về true. Nhưng tốt hơn là chỉ đặt 1;
, trong trường hợp bạn thêm nhiều câu lệnh.
Nếu EXPR
là từ trần, require
giả sử có phần mở rộng ".pm" và thay thế "::" bằng "/" trong tên tệp cho bạn, để giúp bạn dễ dàng tải các mô-đun chuẩn. Hình thức tải mô-đun này không có nguy cơ làm thay đổi không gian tên của bạn.
Tất cả những gì use
làm là tìm ra tên tệp từ tên gói được cung cấp, require
nó trong một BEGIN
khối và gọi import
trên gói. Không có gì ngăn cản bạn không sử dụng use
nhưng thực hiện các bước đó theo cách thủ công.
Ví dụ, bên dưới tôi đặt Example::Plot::FourD
gói trong một tệp có tên t.pl
, tải nó trong một tập lệnh trong tệp s.pl
.
C:\Temp> cat t.pl
package Example::Plot::FourD;
use strict; use warnings;
sub new { bless {} => shift }
sub something { print "something\n" }
"Example::Plot::FourD"
C:\Temp> cat s.pl
use strict; use warnings;
BEGIN {
require 't.pl';
}
my $p = Example::Plot::FourD->new;
$p->something;
C:\Temp> s
something
Ví dụ này cho thấy rằng các tệp mô-đun không phải kết thúc bằng 1
, bất kỳ giá trị thực nào cũng sẽ làm được.
1
không quan trọng. Nó có thể được2
, nó có thể được"foo"
, nó có thể được["a", "list"]
. Điều quan trọng là nó không0
, hoặc bất kỳ thứ gì khác được đánh giá là sai, hoặcuse
sẽ thất bại.