Module::Load - 執行時期需要模組和檔案
use Module::Load;
my $module = 'Data::Dumper';
load Data::Dumper; # loads that module, but not import any functions
# -> cannot use 'Dumper' function
load 'Data::Dumper'; # ditto
load $module # tritto
autoload Data::Dumper; # loads that module and imports the default functions
# -> can use 'Dumper' function
my $script = 'some/script.pl'
load $script;
load 'some/script.pl'; # use quotes because of punctuations
load thing; # try 'thing' first, then 'thing.pm'
load CGI, ':all'; # like 'use CGI qw[:standard]'
Module::Load
消除了需要知道您嘗試需要檔案或模組的麻煩。
如果您查閱 perldoc -f require
,您會看到 require
在給予裸字或字串時,行為會有所不同。
在字串的情況下,require
假設您想要載入檔案。但在裸字的情況下,它假設您指的是模組。
這會在您嘗試在執行時期動態需要模組時造成令人不快的負擔,因為您需要將模組表示法 (Acme::Comment
) 變更為符合您所在特定平台的檔案表示法。
Module::Load
消除了這種開銷,而且會執行 DWYM。
load
和 autoload
之間的差異Module::Load
匯入兩個函式 - load
和 autoload
autoload
自動匯入預設函式,但 load
沒有匯入任何函式。
autoload
可在 BEGIN{};
下使用。
這兩個函式都可以匯入指定的函式。
下列程式碼相同。
load File::Spec::Functions, qw/splitpath/;
autoload File::Spec::Functions, qw/splitpath/;
載入指定的模組。
請參閱 "規則" 以取得詳細的載入規則。
載入指定的模組並匯入預設函式。
除了匯入函式之外,'autoload' 與 'load' 相同。
將指定的模組載入指定的套件。
use Module::Load 'load_remote';
my $pkg = 'Other::Package';
load_remote $pkg, 'Data::Dumper'; # load a module to 'Other::Package'
# but do not import 'Dumper' function
必須引用要載入的模組。
除了指定套件和引用模組名稱之外,'load_remote' 與 'load' 相同。
載入指定的模組並將預設函式匯入指定的套件。
use Module::Load 'autoload_remote';
my $pkg = 'Other::Package';
autoload_remote $pkg, 'Data::Dumper'; # load a module to 'Other::Package'
# and imports 'Dumper' function
必須引用要載入的模組。
除了指定套件和引用模組名稱之外,'autoload_remote' 與 'load_remote' 相同。
所有函式都有下列規則來決定它認為您要什麼
如果參數中除了符合 \w
、:
或 '
之外的任何字元,它必須是檔案
如果參數只符合 [\w:']
,它必須是模組
如果參數只符合 \w
,它可以是模組或檔案。我們會先在 @INC
中尋找 file.pm
,如果找不到,我們會在 @INC
中尋找 file
。如果兩個都找不到,我們會顯示相應的錯誤訊息並終止。
'load' 和 'autoload' 預設會匯入,但 'load_remote' 和 'autoload_remote' 沒有匯入。
若要使用 'load_remote' 或 'autoload_remote',請在 'use' 中指定。
匯入選取的函數。
# imports 'load' and 'autoload' (default)
use Module::Load;
# imports 'autoload' only
use Module::Load 'autoload';
# imports 'autoload' and 'autoload_remote', but don't import 'load';
use Module::Load qw/autoload autoload_remote/;
匯入所有函數。
use Module::Load 'all'; # imports load, autoload, load_remote, autoload_remote
不匯入任何函數(load
和 autoload
也不會匯入)。
use Module::Load '';
use Module::Load 'none';
use Module::Load undef;
由於 perl 中的錯誤(#19213),至少在版本 5.6.1 中,我們必須將 Win32 上的 require 路徑分隔符硬編碼為 /
,就像在 Unix 上一樣,而不是 Win32 的 \
。否則,perl 將無法準確讀取其自己的 %INC,如果再次需要檔案或在最壞的情況下,核心會傾印。
Module::Load
無法執行隱式匯入,只能執行明確匯入。(換句話說,您必須始終明確指定要從模組匯入的內容,即使函數在該模組的 @EXPORT
中也是如此)
Module::Runtime 提供用於載入模組、檢查模組名稱的有效性、將模組名稱轉換為部分 .pm
路徑以及相關工具函數。
"require" in perlfunc 和 "use" in perlfunc。
Mojo::Loader 是「類別載入器和外掛程式架構」,且包含在 Mojolicious 發行版中。
Module::Loader 是用於在給定命名空間中尋找和載入模組的模組,靈感來自 Mojo::Loader
。
感謝 Jonas B. Nielsen 讓明確匯入發揮作用。
請將錯誤或其他問題回報至 <bug-module-load@rt.cpan.org>。
此模組由 Jos Boumans <kane@cpan.org> 編寫。
此函式庫是免費軟體;您可以在與 Perl 相同的條款下重新發布和/或修改它。