Perl - Gói và Mô-đun
Gói là gì?
Các packagecâu lệnh chuyển ngữ cảnh đặt tên hiện tại sang một vùng tên cụ thể (bảng biểu tượng). Như vậy -
Gói là một tập hợp mã nằm trong không gian tên riêng của nó.
Không gian tên là một tập hợp được đặt tên của các tên biến duy nhất (còn được gọi là bảng ký hiệu).
Không gian tên ngăn chặn xung đột tên biến giữa các gói.
Các gói cho phép xây dựng các mô-đun, khi được sử dụng, sẽ không làm tắc nghẽn các biến và chức năng bên ngoài không gian tên riêng của mô-đun.
Gói vẫn có hiệu lực cho đến khi một câu lệnh gói khác được gọi hoặc cho đến khi kết thúc khối hoặc tệp hiện tại.
Bạn có thể tham chiếu rõ ràng đến các biến trong một gói bằng cách sử dụng :: bộ định tính gói.
Sau đây là một ví dụ có gói chính và gói Foo trong một tệp. Ở đây biến đặc biệt __PACKAGE__ đã được sử dụng để in tên gói.
#!/usr/bin/perl
# This is main package
$i = 1;
print "Package name : " , __PACKAGE__ , " $i\n";
package Foo;
# This is Foo package
$i = 10;
print "Package name : " , __PACKAGE__ , " $i\n";
package main;
# This is again main package
$i = 100;
print "Package name : " , __PACKAGE__ , " $i\n";
print "Package name : " , __PACKAGE__ , " $Foo::i\n";
1;
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:
Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10
Khối BEGIN và END
Bạn có thể xác định bất kỳ số lượng khối mã nào có tên BEGIN và END, chúng hoạt động như các hàm tạo và hủy tương ứng.
BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
Mỗi BEGIN khối được thực thi sau khi tập lệnh perl được tải và biên dịch nhưng trước khi bất kỳ câu lệnh nào khác được thực thi.
Mọi khối END được thực thi ngay trước khi trình thông dịch perl thoát.
Các khối BEGIN và END đặc biệt hữu ích khi tạo các mô-đun Perl.
Ví dụ sau cho thấy cách sử dụng của nó -
#!/usr/bin/perl
package Foo;
print "Begin and Block Demo\n";
BEGIN {
print "This is BEGIN Block\n"
}
END {
print "This is END Block\n"
}
1;
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:
This is BEGIN Block
Begin and Block Demo
This is END Block
Mô-đun Perl là gì?
Mô-đun Perl là một gói có thể sử dụng lại được xác định trong tệp thư viện có tên giống với tên của gói có phần mở rộng là .pm.
Một tệp mô-đun Perl được gọi là Foo.pm có thể chứa các câu lệnh như thế này.
#!/usr/bin/perl
package Foo;
sub bar {
print "Hello $_[0]\n"
}
sub blat {
print "World $_[0]\n"
}
1;
Vài điểm quan trọng về mô-đun Perl
Chức năng require và use sẽ tải một mô-đun.
Cả hai đều sử dụng danh sách các đường dẫn tìm kiếm trong @INC để tìm mô-đun.
Cả hai chức năng require và use gọi eval chức năng xử lý mã.
Các 1; ở dưới cùng khiến cho eval đánh giá thành TRUE (và do đó không thất bại).
Chức năng Yêu cầu
Một mô-đun có thể được tải bằng cách gọi require chức năng như sau -
#!/usr/bin/perl
require Foo;
Foo::bar( "a" );
Foo::blat( "b" );
Bạn phải nhận thấy rằng tên chương trình con phải có đầy đủ điều kiện để gọi chúng. Sẽ rất tốt nếu bật chương trình conbar và blat được nhập vào không gian tên riêng của chúng ta để chúng ta không phải sử dụng bộ định nghĩa Foo ::.
Chức năng sử dụng
Một mô-đun có thể được tải bằng cách gọi use chức năng.
#!/usr/bin/perl
use Foo;
bar( "a" );
blat( "b" );
Lưu ý rằng chúng tôi không cần phải xác định đầy đủ các tên chức năng của gói. Cácuse hàm sẽ xuất một danh sách các ký hiệu từ một mô-đun được đưa ra một vài câu lệnh được thêm vào bên trong một mô-đun.
require Exporter;
@ISA = qw(Exporter);
Sau đó, cung cấp danh sách các ký hiệu (vô hướng, danh sách, băm, chương trình con, v.v.) bằng cách điền vào biến danh sách có tên @EXPORT: Ví dụ -
package Module;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat);
sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" }
sub splat { print "Not $_[0]\n" } # Not exported!
1;
Tạo cây mô-đun Perl
Khi bạn đã sẵn sàng gửi mô-đun Perl của mình, thì có một cách chuẩn để tạo Cây mô-đun Perl. Điều này được thực hiện bằng cách sử dụngh2xstiện ích. Tiện ích này đi kèm với Perl. Đây là cú pháp để sử dụng h2xs:
$h2xs -AX -n ModuleName
Ví dụ: nếu mô-đun của bạn có sẵn trong Person.pm , sau đó chỉ cần đưa ra lệnh sau:
$h2xs -AX -n Person
Điều này sẽ tạo ra kết quả sau:
Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST
Đây là mô tả của các tùy chọn này -
-A bỏ qua mã Autoloader (được sử dụng tốt nhất bởi các mô-đun xác định một số lượng lớn các chương trình con không thường xuyên được sử dụng).
-X bỏ qua các phần tử XS (Chương trình con eXternal, trong đó eXternal có nghĩa là bên ngoài Perl, tức là C).
-n chỉ định tên của mô-đun.
Vì vậy, lệnh trên tạo cấu trúc sau bên trong thư mục Person. Kết quả thực tế được hiển thị ở trên.
- Changes
- Makefile.PL
- MANIFEST (chứa danh sách tất cả các tệp trong gói)
- README
- t / (tệp thử nghiệm)
- lib / (Mã nguồn thực tế ở đây
Vì vậy, cuối cùng, bạn tarcấu trúc thư mục này thành một tệp Person.tar.gz và bạn có thể gửi nó. Bạn sẽ phải cập nhật tệp README với các hướng dẫn thích hợp. Bạn cũng có thể cung cấp một số tệp ví dụ thử nghiệm trong thư mục t.
Cài đặt Mô-đun Perl
Tải xuống mô-đun Perl ở dạng tệp tar.gz. Sử dụng trình tự sau để cài đặt bất kỳ Mô-đun Perl nàoPerson.pm đã được tải xuống dưới dạng Person.tar.gz tập tin.
tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install
Trình thông dịch Perl có một danh sách các thư mục trong đó nó tìm kiếm các mô-đun (mảng toàn cầu @INC).