我有一个Perl脚本,它使用一个不常见的模块,我希望它在没有安装该模块的情况下可用,尽管功能有限。有可能吗?
我想到了这样的事情:
my $has_foobar;
if (has_module "foobar") {
<< use it >>
$has_foobar = true;
} else {
print STDERR "Warning: foobar not found. Not using it.\n";
$has_foobar = false;
}
答案 0 :(得分:6)
您可以使用require在运行时加载模块,使用eval来捕获可能的异常:
eval {
require Foobar;
Foobar->import();
};
if ($@) {
warn "Error including Foobar: $@";
}
另见perldoc use。
答案 1 :(得分:4)
考虑if编译指示。
use if CONDITION, MODULE => ARGUMENTS;
答案 2 :(得分:2)
我建议使用Module::Load
以便intention is made clear。
编辑:忽略评论Module::Load is in core。
答案 3 :(得分:0)
另一种方法是使用Class :: MOP的load_class方法。您可以像使用它一样使用它:
Class :: MOP :: load_class('foobar',$ some_options)
它抛出异常,所以你必须抓住它。更多信息here。
此外,虽然这不一定在每个系统类上都是如此,但是MOP非常有用,而且每天Moose变得越来越普遍,它可能在你的系统上。