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
如果找不到模块的安装位置,它将返回 undef,如果找到文件,它将返回带有以下键的哈希引用
包含模块的文件的完整路径
目录,或更确切地说,加载模块的 @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 是否会尝试解析(并求值)您尝试加载的模块的版本。
如果您不想这样做,请将此变量设置为 false
。然后理解版本比较是不可能的,Module::Load::Conditional 无法告诉您已安装的模块版本。从安全或性能的角度来看,这可能是可取的。请注意,$FIND_VERSION
代码在 taint 模式
下安全运行。
默认值为 1;
这控制 Module::Load::Conditional
是否检查您的 %INC
哈希表以查看模块是否可用。默认情况下,仅扫描 @INC
以查看模块是否物理存在于您的文件系统上,或是否可通过 @INC 钩子
获得。将此变量设置为 true
将信任 %INC
中的任何条目并为您返回它们。
默认值为 0;
此选项控制 Module::Load::Conditional
是否通过移除“.
”来清理 @INC
。当前默认设置为 0
,但此设置在未来版本中可能会发生改变。
此选项保存 can_load
函数的缓存。如果你明确希望移除当前缓存,则可以将此变量设置为 undef
此选项保存 can_load
调用期间发生的最后一个错误的字符串。当 can_load
返回 undef
时,此选项非常有用。
此选项控制 Module::Load::Conditional
是否检查双生命周期核心模块是否已弃用。如果此选项设置为 true,则如果发现从 $Config{privlibexp}
加载了双生命周期模块,check_install
将向 uptodate
返回 false。
默认值为 0;
Module::Load
请将错误或其他问题报告给 <[email protected]>。
此模块由 Jos Boumans <[email protected]> 编写。
此库是免费软件;你可以根据与 Perl 相同的条款重新分发和/或修改它。