尝试在Perl使用模块,如果模块无法打印消息(try to use Module in Perl a

2019-06-25 07:26发布

我希望能够做到这一点在Perl(下面的代码是Python的大声笑)

try:
  import Module
except:
  print "You need module Module to run this program."

有没有人有任何想法如何?

Answer 1:

TIMTOWTDI :

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";

你可以找到模块::负载上CPAN 。



Answer 2:

您可以使用模块::负载条件::

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';
}


Answer 3:

有做很多的模块; 见列表CPAN模块(可以)装载的其它模块 。 然而,这是一个有点冒险依靠外部模块上(如果它不存在什么呢?)。 嗯,至少,如果依靠驼鹿, 类::负载可以安全地使用,因为它是穆斯的先决条件:

#!/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.";


Answer 4:

像这样的东西, use Net::SMTP ,如果你已经安装了模块,或潇洒sendmail标注作为最后的手段。

my $mailmethod = eval "use Net::SMTP; 1" ? 'perl' : 'sendmail';


Answer 5:

use strict;
use warnings;
use Module;

如果您没有安装模块做,你会得到错误“无法找到Module.pm在@公司(@公司包含:......)” 这是足够理解的。

有没有你想/需要更具体的消息,一些特别的原因吗?



Answer 6:

以下是我该怎么去了解它:

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 $@;
}


文章来源: try to use Module in Perl and print message if module not available