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
pragma 来实现此目的;但是,您可以在编译时使用以下方法实现此效果
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
构造假定模块或 pragma 已正确实现 unimport()
方法——但大多数模块和 pragma 并未实现。这解释了为什么 no if
构造的适用性有限。
当前实现不允许指定模块的所需版本。
Module::Requires 可用于有条件地加载一个或多个模块,其约束基于模块的版本。但与 if
不同,Module::Requires 不是核心模块。
Module::Load::Conditional 提供了许多函数,你可以使用这些函数来查询可用的模块,然后在运行时加载一个或多个模块。
CPAN 中的 provide 模块可用于根据正在运行的 Perl 版本选择多个可能的模块之一进行加载。
Ilya Zakharevich mailto:[email protected]。
此软件的版权归 Ilya Zakharevich 所有 (c) 2002。
这是免费软件;你可以根据与 Perl 5 编程语言系统本身相同的条款重新分发或修改它。