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

如何有条件地导入Perl中的包?,perl,import,module,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 =

我有一个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;
}
my$has\u foobar;
如果(有_模块“foobar”){
>
$has_foobar=true;
}否则{
打印STDERR“警告:未找到foobar。未使用它。\n”;
$has_foobar=false;
}
您可以使用在运行时加载模块,并捕获可能的异常:

eval {
    require Foobar;
    Foobar->import();
};  
if ($@) {
    warn "Error including Foobar: $@";
}
另见perldoc

我建议雇佣员工,以便

编辑:忽略注释。

考虑pragma


另一种方法是使用Class::MOP的load_类方法。您可以像这样使用它:

Class::MOP::load_类('foobar',$some_选项)

它抛出一个异常,因此您必须捕获它。更多信息


另外,虽然这不一定在每个系统类上都有::MOP非常有用,而且随着Moose的日益流行,它很可能在您的系统上出现。

如果您要调用
import
,那么您可能希望将其包装在
BEGIN
块中,以便它在编译时发生。否则,
import
就不太可能有用了。问题是模块::Load也不是每个系统都安装的。这不是问题,CPAN会在您的模块/程序之前自动安装它。这对于您(开发人员)拥有完全控制权的环境是一个很好的建议。有些环境并非如此(例如,大型公司只允许将Perl库安装在软件工程控制的位置,并且必须由该团队进行审查)。@DVK:是的,这正是我的问题。
use if CONDITION, MODULE => ARGUMENTS;