如何在Perl中有条件地导入包?

时间:2010-10-18 08:20:37

标签: perl import module

我有一个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;
}

4 个答案:

答案 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变得越来越普遍,它可能在你的系统上。