內容

名稱

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。

loadautoload 之間的差異

Module::Load 匯入兩個函式 - loadautoload

autoload 自動匯入預設函式,但 load 沒有匯入任何函式。

autoload 可在 BEGIN{}; 下使用。

這兩個函式都可以匯入指定的函式。

下列程式碼相同。

load File::Spec::Functions, qw/splitpath/;

autoload File::Spec::Functions, qw/splitpath/;

函式

load

載入指定的模組。

請參閱 "規則" 以取得詳細的載入規則。

autoload

載入指定的模組並匯入預設函式。

除了匯入函式之外,'autoload' 與 'load' 相同。

load_remote

將指定的模組載入指定的套件。

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' 相同。

autoload_remote

載入指定的模組並將預設函式匯入指定的套件。

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' 相同。

規則

所有函式都有下列規則來決定它認為您要什麼

匯入函式

'load' 和 'autoload' 預設會匯入,但 'load_remote' 和 'autoload_remote' 沒有匯入。

若要使用 'load_remote' 或 'autoload_remote',請在 'use' 中指定。

"load","autoload","load_remote","autoload_remote"

匯入選取的函數。

# 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/;
'all'

匯入所有函數。

use Module::Load 'all'; # imports load, autoload, load_remote, autoload_remote
'','none',undef

不匯入任何函數(loadautoload 也不會匯入)。

use Module::Load '';

use Module::Load 'none';

use Module::Load undef;

Caveats

由於 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 相同的條款下重新發布和/或修改它。