Sự khác nhau giữa việc thực hiện use My::Module
và require My::Module
là gì?Trong Perl, sự khác nhau giữa việc sử dụng và yêu cầu tải một mô-đun là gì?
Trả lời
Các use
chức năng:
use ModuleName;
tương đương với đoạn mã sau sử dụng require
chức năng:
BEGIN {
require ModuleName;
ModuleName->import;
}
Khối BEGIN
gây mã này để chạy ngay sau khi phân tích cú pháp nhìn thấy nó. Các require
tải các mô-đun hoặc die
s cố gắng. Và sau đó chức năng import
của mô-đun được gọi. Chức năng import
có thể thực hiện đủ mọi thứ, nhưng thông thường nó sẽ tải các hàm vào không gian tên use
d nó (thường là với mô-đun Exporter
).
Điều quan trọng cần lưu ý đó là nhập khẩu sẽ không được gọi trong trường hợp này:
use ModuleName();
Trong trường hợp đó, nó tương đương với
BEGIN {
require ModuleName;
}
Trang manpage nói rằng * chính xác * tương đương :) – Inshallah
@Inshalla Tôi thích để lại một căn phòng nhỏ lung linh cho bộ nhớ bị lỗi của tôi. –
Từ perldoc -q
"difference between require and use":
use Module
là nhưrequire Module
, ngoại trừ việcuse
4.1: tải các module tại thời gian biên dịch, không chạy theo thời gian.
4.2: nhập biểu tượng và ngữ nghĩa từ gói đó vào gói hiện tại.
use
chạy lúc biên dịch và require
chạy trong thời gian chạy.
Đừng quên việc gọi 'nhập'. –
Đây là câu trả lời mà họ đang tìm kiếm trên các bài kiểm tra Perl và các cuộc phỏng vấn việc làm. Bạn cần phải ghi nhớ điều này! – Hawk
Perl đi kèm với tài liệu hướng dẫn tuyệt vời. Mọi người sẽ được hưởng lợi từ việc đọc toàn bộ tài liệu ít nhất một lần mỗi vài tháng.
Nếu không
require
nhu cầu đó một tập tin thư viện được bao gồm nếu nó chưa được bao gồm. Tệp được bao gồm thông qua cơ chế do-FILE, là về cơ bản chỉ là một loạt các eval với báo trước rằng các biến từ vựng trong tập lệnh gọi sẽ là ẩn với mã được bao gồm. Có ngữ nghĩa tương tự như sau đây chương trình con:
... v.v.Tương tự như vậy,
C:\>
perldoc -f use
Nhập khẩu một số ngữ nghĩa vào các gói hiện từ các mô-đun được đặt tên, thường bởi aliasing nhất định chương trình con hoặc tên biến thành gói của bạn. Nó chính xác tương đương với
BEGIN { require Module; Module->import(LIST); }
ngoại trừ Mô-đun đó phải là một vật thể.
... vv
Ngoài ra còn có các perlfaq entry mặc dù tôi nghĩ rằng đó là ít nhiều thông tin hơn so với ở trên.
Ngoài lệnh 'perldoc' tuyệt vời, bạn có thể truy cập tất cả tài liệu tương tự thông qua http://perldoc.perl.org –
Ah. Thẻ kbd của bạn làm cho khó hơn để biết liên kết là gì (cũng như hiển thị không đẹp lắm). – ysth
@Ether: nhưng đây là m. Tuy nhiên, một trong số họ. – ysth
Điều này có thể dễ dàng để tìm ra trên của riêng bạn, nhưng nó chắc chắn là một câu hỏi Perl rất tốt mà người mới bắt đầu là dễ bị hỏi. Tôi không thấy lý do tại sao nó không được trên stackoverflow. Thiệt hại ở đâu? – innaM