2009-07-21 38 views
27

use My::Modulerequire My::Module有什麼區別?在Perl中,加載模塊的使用和要求有什麼區別?

+2

@Ether:但這是m。無論如何,其中之一。 – ysth 2009-07-22 02:49:48

+7

這可能很容易找到你自己的,但它絕對是一個非常好的Perl問題,初學者容易問。我不明白爲什麼它不應該在stackoverflow上。傷害在哪裏? – innaM 2009-07-22 06:37:33

回答

30

use的功能:

use ModuleName; 

是相當於使用require函數以下代碼:

BEGIN { 
    require ModuleName; 
    ModuleName->import; 
} 

BEGIN塊導致此代碼儘快解析器看到它運行。 require加載模塊或die正在嘗試。然後調用模塊的功能import。函數可以做各種事情,但它通常會將函數加載到use(通常是Exporter模塊)的名稱空間中。

重要的是要注意的是進口將不會被調用在這種情況下:

use ModuleName(); 

在這種情況下,它相當於

BEGIN { 
    require ModuleName; 
} 
3

use在編譯時運行,並且require在運行時運行。

+3

不要忘記調用`import`。 – 2009-07-21 20:54:28

+2

這是他們在Perl測試和求職面試中尋找的答案。你需要記住這個! – Hawk 2014-06-02 14:52:53

10

Perl附帶豐富的文檔。每隔幾個月至少閱讀一次所有文檔,每個人都將受益。

C:\>perldoc -f require

否則require要求該庫文件是包含 如果它尚未被列入 。該文件通過 do-FILE機制包括在內,其實質上只是各種eval ,其中調用腳本中的詞彙變量 將是 對於包括的代碼是不可見的。有 語義相似如下 子程序:

...等等同樣,

C:\>perldoc -f use

通過混淆某些 子程序或變量名到您的 包進口一些語義到 當前包從命名的模塊, 一般。它完全等同於

BEGIN { require Module; Module->import(LIST); } 

除了該模塊必須是空白字。

...等

也有perlfaq entry雖然我覺得它比上面的信息較少。

相關問題