Module::Load::Conditional - 查詢模組資訊/執行時期載入
use Module::Load::Conditional qw[can_load check_install requires];
my $use_list = {
CPANPLUS => 0.05,
LWP => 5.60,
'Test::More' => undef,
};
print can_load( modules => $use_list )
? 'all modules loaded successfully'
: 'failed to load required modules';
my $rv = check_install( module => 'LWP', version => 5.60 )
or print 'LWP is not installed!';
print 'LWP up to date' if $rv->{uptodate};
print "LWP version is $rv->{version}\n";
print "LWP is installed as file $rv->{file}\n";
print "LWP requires the following modules to be installed:\n";
print join "\n", requires('LWP');
### allow M::L::C to peek in your %INC rather than just
### scanning @INC
$Module::Load::Conditional::CHECK_INC_HASH = 1;
### reset the 'can_load' cache
undef $Module::Load::Conditional::CACHE;
### don't have Module::Load::Conditional issue warnings --
### default is '1'
$Module::Load::Conditional::VERBOSE = 0;
### The last error that happened during a call to 'can_load'
my $err = $Module::Load::Conditional::ERROR;
Module::Load::Conditional 提供簡單的方法,可在執行時期查詢並載入系統上已安裝的任何模組。
它一次可以載入多個模組,或者如果其中一個無法載入,則不載入任何模組。它還會處理任何錯誤檢查等事項。
check_install
允許您驗證某個模組是否已安裝。您可以使用以下參數呼叫它
您要驗證的模組名稱 -- 這是必要的金鑰
此模組需要的版本 -- 這是選用的
是否詳細說明其執行內容 -- 它預設為 $Module::Load::Conditional::VERBOSE
如果它無法找到模組安裝位置,它將傳回未定義;如果它能找到檔案,它將傳回具有下列金鑰的雜湊參照
包含模組的檔案的完整路徑
載入模組的目錄,或更精確地說,是 @INC
項目。
已安裝模組的版本號碼 - 如果模組沒有(或無法分析)版本號碼,或如果變數 $Module::Load::Conditional::FIND_VERSION
設為 true,這將會是 undef
。(有關詳細資訊,請參閱下方的 全域變數
區段)
布林值,表示是否發現模組至少為您指定的版本。如果您未指定版本,如果找到模組,uptodate 將永遠為 true。如果在模組中找不到可分析的版本,uptodate 也會為 true,因為 check_install
沒有明確驗證的方法。
另請參閱 $Module::Load::Conditional::DEPRECATED
,它會影響此值的結果。
can_load
會取得模組清單,選擇性地加上版本號碼,並確定它是否能夠載入它們。如果它能載入它們 *全部*,它將會載入。如果有一個或多個無法載入,則不會載入任何一個。
如果您在程式中有多種方式 (tm) 來解決問題,而且只有在所有模組都能載入的情況下才繼續執行,否則不載入,這會特別有用。
此函式在幕後使用 Module::Load 中的 load
函式或 autoload_remote
函式。
can_load
會採用下列引數
這是模組/版本配對的雜湊。版本表示要載入的最小版本。如果未提供版本,則假設任何版本都夠好。
這會控制是否在模組載入失敗時列印警告。預設值是使用 $Module::Load::Conditional::VERBOSE 的值。
can_load
會將其結果保存在快取中,因此它不會載入相同的模組兩次,也不會嘗試載入之前已載入失敗的模組。預設情況下,can_load
會檢查其快取,但您可以透過將 nocache
設為 true 來覆寫它。
這會控制是否將已載入模組的函式匯入至呼叫程式套件。預設是不匯入任何函式。
請參閱 Module::Load 中的 autoload
函式和 autoload_remote
函式以取得詳細資料。
requires
可以告訴您特定模組需要哪些其他模組。當您打算撰寫模組以公開發布並列出其先決條件時,這會特別有用。
requires
只採用一個引數:模組名稱。然後,它會先檢查是否實際上可以載入此模組,如果不能,則傳回未定義。否則,它會傳回代表會為模組載入的模組和實用的清單。
注意:require
傳回的清單來自您目前的 perl 和目前的安裝。
透過變更下列全域變數,可以變更 Module::Load::Conditional 的行為
這控制 Module::Load::Conditional 是否會發出警告和說明,說明為何某些事情可能會失敗。如果您將其設定為 0,Module::Load::Conditional 將不會輸出任何警告。預設值為 0;
這控制 Module::Load::Conditional 是否會嘗試剖析 (並 eval) 您嘗試載入的模組版本。
如果您不希望執行此操作,請將此變數設定為 false
。然後了解版本比較是不可能的,而且 Module::Load::Conditional 無法告訴您已安裝哪個模組版本。這可能從安全或效能的角度來看是可取的。請注意,$FIND_VERSION
程式碼在 taint mode
下安全執行。
預設值為 1;
這控制 Module::Load::Conditional
是否檢查您的 %INC
hash 以查看模組是否可用。預設情況下,只會掃描 @INC
以查看模組是否實際存在於您的檔案系統上,或透過 @INC-hook
可用。將此變數設定為 true
將信任 %INC
中的任何項目並為您傳回它們。
預設值為 0;
這控制 Module::Load::Conditional
是否透過移除「.
」來清除 @INC
。目前的預設設定為 0
,但這可能會在未來的版本中變更。
這保留 can_load
函式的快取。如果您明確要移除目前的快取,您可以將此變數設定為 undef
這保留在呼叫 can_load
時發生的最後一個錯誤字串。當 can_load
傳回 undef
時,檢查這項內容很有用。
這控制 Module::Load::Conditional
是否檢查雙生核心模組是否已棄用。如果設為 true,如果發現從 $Config{privlibexp}
載入雙生模組,check_install
會傳回 false 至 uptodate
預設值為 0;
Module::Load
請將錯誤或其他問題回報至 <bug-module-load-conditional@rt.cpan.org>。
此模組由 Jos Boumans <kane@cpan.org> 編寫。
此函式庫為自由軟體;您可以在與 Perl 相同的條款下重新散布和/或修改它。