if - 如果條件成立,則use
Perl 模組
use if CONDITION, "MODULE", ARGUMENTS;
no if CONDITION, "MODULE", ARGUMENTS;
use if
if
模組用於有條件地載入另一個模組。結構
use if CONDITION, "MODULE", ARGUMENTS;
... 將只會在 CONDITION
評估為 true 時載入 MODULE
;如果 CONDITION
評估為 false,則沒有作用。(如果 'use strict "subs";'
生效,則模組名稱(假設它至少包含一個 ::
)必須加上引號。)如果 CONDITION 評估為 true,則上述程式碼行與
use MODULE ARGUMENTS;
例如,Unicode::UCD 模組的 charinfo 函式只有在符合特定條件時才會使用 Unicode::Normalize 中的兩個函式
use if defined &DynaLoader::boot_DynaLoader,
"Unicode::Normalize" => qw(getCombinClass NFD);
假設您希望 ARGUMENTS
為空清單,即,產生與
use MODULE ();
您無法使用 if
條件編譯指令來達成此目的;然而,您可以在編譯時使用 no if
來達到完全相同的效果。
BEGIN { require MODULE if CONDITION }
no if
no if
建構式主要用於在特定版本的 perl 中,某些類別的警告會產生多餘的輸出時,停用這些類別的警告。
例如,redundant
類別的警告是在 Perl-5.22 中引入的。此警告會標記傳遞給 printf
和 sprintf
的某些多餘參數。但是,如果您的程式碼在較早版本的 perl 中執行時沒有警告,而且您不在乎較新版本中的 redundant
警告,您可以呼叫
use warnings;
no if $] >= 5.022, q|warnings|, qw(redundant);
my $test = { fmt => "%s", args => [ qw( x y ) ] };
my $result = sprintf $test->{fmt}, @{$test->{args}};
no if
建構式假設模組或條件編譯指令已正確實作 unimport()
方法,但大多數模組和條件編譯指令並未實作。這說明了為什麼 no if
建構式的適用性有限。
目前的實作不允許指定模組所需版本。
Module::Requires 可用於有條件地載入一個或多個模組,其限制取決於模組的版本。但與 if
不同的是,Module::Requires 不是核心模組。
Module::Load::Conditional 提供了許多函式,您可以使用這些函式來查詢有哪些模組可用,然後在執行時載入其中一個或多個模組。
CPAN 中的 provide 模組可根據正在執行的 Perl 版本,從多個可能的模組中選擇一個來載入。
Ilya Zakharevich mailto:ilyaz@cpan.org。
此軟體的版權為 Ilya Zakharevich 所有 (c) 2002。
這是自由軟體;您可以在與 Perl 5 程式語言系統相同的條款下重新散布和/或修改它。