內容

名稱

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 提供簡單的方法,可在執行時期查詢並載入系統上已安裝的任何模組。

它一次可以載入多個模組,或者如果其中一個無法載入,則不載入任何模組。它還會處理任何錯誤檢查等事項。

方法

$href = check_install( module => 名稱 [, version => 版本, verbose => 布林值 ] );

check_install 允許您驗證某個模組是否已安裝。您可以使用以下參數呼叫它

模組

您要驗證的模組名稱 -- 這是必要的金鑰

版本

此模組需要的版本 -- 這是選用的

詳細

是否詳細說明其執行內容 -- 它預設為 $Module::Load::Conditional::VERBOSE

如果它無法找到模組安裝位置,它將傳回未定義;如果它能找到檔案,它將傳回具有下列金鑰的雜湊參照

檔案

包含模組的檔案的完整路徑

目錄

載入模組的目錄,或更精確地說,是 @INC 項目。

版本

已安裝模組的版本號碼 - 如果模組沒有(或無法分析)版本號碼,或如果變數 $Module::Load::Conditional::FIND_VERSION 設為 true,這將會是 undef。(有關詳細資訊,請參閱下方的 全域變數 區段)

最新

布林值,表示是否發現模組至少為您指定的版本。如果您未指定版本,如果找到模組,uptodate 將永遠為 true。如果在模組中找不到可分析的版本,uptodate 也會為 true,因為 check_install 沒有明確驗證的方法。

另請參閱 $Module::Load::Conditional::DEPRECATED,它會影響此值的結果。

$bool = can_load( modules => { NAME => VERSION [,NAME => VERSION] }, [verbose => BOOL, nocache => BOOL, autoload => BOOL] )

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 函式以取得詳細資料。

@list = requires( MODULE );

requires 可以告訴您特定模組需要哪些其他模組。當您打算撰寫模組以公開發布並列出其先決條件時,這會特別有用。

requires 只採用一個引數:模組名稱。然後,它會先檢查是否實際上可以載入此模組,如果不能,則傳回未定義。否則,它會傳回代表會為模組載入的模組和實用的清單。

注意:require 傳回的清單來自您目前的 perl 和目前的安裝。

全域變數

透過變更下列全域變數,可以變更 Module::Load::Conditional 的行為

$Module::Load::Conditional::VERBOSE

這控制 Module::Load::Conditional 是否會發出警告和說明,說明為何某些事情可能會失敗。如果您將其設定為 0,Module::Load::Conditional 將不會輸出任何警告。預設值為 0;

$Module::Load::Conditional::FIND_VERSION

這控制 Module::Load::Conditional 是否會嘗試剖析 (並 eval) 您嘗試載入的模組版本。

如果您不希望執行此操作,請將此變數設定為 false。然後了解版本比較是不可能的,而且 Module::Load::Conditional 無法告訴您已安裝哪個模組版本。這可能從安全或效能的角度來看是可取的。請注意,$FIND_VERSION 程式碼在 taint mode 下安全執行。

預設值為 1;

$Module::Load::Conditional::CHECK_INC_HASH

這控制 Module::Load::Conditional 是否檢查您的 %INC hash 以查看模組是否可用。預設情況下,只會掃描 @INC 以查看模組是否實際存在於您的檔案系統上,或透過 @INC-hook 可用。將此變數設定為 true 將信任 %INC 中的任何項目並為您傳回它們。

預設值為 0;

$Module::Load::Conditional::FORCE_SAFE_INC

這控制 Module::Load::Conditional 是否透過移除「.」來清除 @INC。目前的預設設定為 0,但這可能會在未來的版本中變更。

$Module::Load::Conditional::CACHE

這保留 can_load 函式的快取。如果您明確要移除目前的快取,您可以將此變數設定為 undef

$Module::Load::Conditional::ERROR

這保留在呼叫 can_load 時發生的最後一個錯誤字串。當 can_load 傳回 undef 時,檢查這項內容很有用。

$Module::Load::Conditional::DEPRECATED

這控制 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 相同的條款下重新散布和/或修改它。