我希望能够在Perl中执行此操作(下面的代码是Python lol)
try:
import Module
except:
print "You need module Module to run this program."
有没有人知道怎么做?
答案 0 :(得分:18)
eval "use Module; 1" or die "you need Module to run this program".
或
require Module or die "you need Module to run this program";
Module->import;
或
use Module::Load;
eval { load Module; 1 } or die "you need Module to run this program";
您可以在Module::Load上找到CPAN。
答案 1 :(得分:11)
您可以使用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,
};
if(can_load( modules => $use_list ))
{
print 'all modules loaded successfully';
}
else
{
print 'failed to load required modules';
}
答案 2 :(得分:2)
有很多模块可以做到这一点;请参阅CPAN modules that (can) load other modules列表。 但是,依赖外部模块(如果它不存在会怎样?)会有点风险。 好吧,至少,如果你依赖于Moose,Class::Load可以安全使用,因为这是Moose的先决条件:
#!/usr/bin/env perl
use strict;
use utf8;
use warnings qw(all);
use Class::Load qw(try_load_class);
try_load_class('Module')
or die "You need module Module to run this program.";
答案 3 :(得分:1)
如下所示,use Net::SMTP
如果你安装了模块,或者作为最后的手段,那就是俗气的sendmail
标注。
my $mailmethod = eval "use Net::SMTP; 1" ? 'perl' : 'sendmail';
答案 4 :(得分:0)
use strict; use warnings; use Module;
如果您没有安装Module,则会收到错误“无法在@INC中找到Module.pm(@INC包含:...)。”这是可以理解的。
您是否需要/需要更具体的消息?
答案 5 :(得分:0)
以下是我的意思:
sub do_optional_thing {
init_special_support();
Module::Special::wow();
}
sub init_special_support {
# check whether module is already loaded
return if defined $INC{'Module/Special'};
eval {
require Module::Special;
Module::Special->import();
};
croak "Special feature not supported: Module::Special not available" if $@;
}