if 也可能是指函式:if

內容

名稱

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 中引入的。此警告會標記傳遞給 printfsprintf 的某些多餘參數。但是,如果您的程式碼在較早版本的 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 程式語言系統相同的條款下重新散布和/或修改它。