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 perldiễn giải các tệp đó.
Tuy nhiên, việc đặt các mô-đun trong .pmcá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::FourDvà bạn đặt nó trong một thư mục Example/Plot/FourD.pmtrong một đường dẫn trong của bạn @INC, thì usevà requiresẽ 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 EXPRlà từ trần, requiregiả 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ì uselàm là tìm ra tên tệp từ tên gói được cung cấp, requirenó trong một BEGINkhối và gọi importtrên gói. Không có gì ngăn cản bạn không sử dụng usenhư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::FourDgó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.
1khô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ặcusesẽ thất bại.