1. 程式人生 > >在Perl中Require 和 use 的區別

在Perl中Require 和 use 的區別

區別一:跟require不同的是,use只能用於模組的包含,也就是.pm檔案。
比如:
use MyModule;
實際上,編譯器將從@INC指定的目錄下去尋找MyModule.pm模組。如果模組名稱中包含::雙冒號,該雙冒號將作為路徑分隔符,相當於Unix下的/或者Windows下
的。 如:
use MyDirectory::MyModule;
編譯器將從@INC指定的目錄下的MyDirectory子目錄去尋找MyModule模組, 類似
如下路徑:
C:PerllibMyDirectory
C:PerlextlibMyDirectory
C:PerlsitelibMyDirectory
區別二:兩個都是包含,但是包含的條件是不一樣的。require包含是發生在程式執行期,而use包含是發生在編譯期。學過C/C++的人比較容易理解。下面的例子是錯誤的:
use Config;
if( $Config{'osname'} eq "MSWin32" )
{
use Win32Module;
}
else
{
use UnixModule;
}
正 因為use是發生在編譯期,程式碼沒有執行,所以$Config變數的值是無法判斷的。在內部,use其實呼叫了require和import靜態函式。 import()函式告訴包哪些特徵將要被匯入當前包中,這意味著用之前不必驗證函式或者變數是否合法。而require是不會呼叫import()的。