2009-07-21 31 views
27

Sự khác nhau giữa việc thực hiện use My::Modulerequire 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ì?

+2

@Ether: nhưng đây là m. Tuy nhiên, một trong số họ. – ysth

+7

Đ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

Trả lời

30

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; 
} 
+1

Trang manpage nói rằng * chính xác * tương đương :) – Inshallah

+1

@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. –

15

Từ perldoc -q "difference between require and use":

use Module là như require Module, ngoại trừ việc use

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.

3

use chạy lúc biên dịch và require chạy trong thời gian chạy.

+3

Đừng quên việc gọi 'nhập'. –

+2

Đâ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

10

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.

C:\>perldoc -f require

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.

+1

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 –

+0

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

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