Подтвердить что ты не робот

Попробуйте использовать модуль в Perl и распечатать сообщение, если модуль недоступен

Я хотел иметь возможность сделать это в Perl (ниже приведен код Python lol)

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

Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 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";

Вы можете найти Module:: Load на CPAN.

Ответ 2

Вы можете использовать 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';
}

Ответ 3

Для этого существует множество модулей; см. список модулей CPAN, которые (могут) загружать другие модули. Однако немного рискованно полагаться на внешний модуль (что, если его нет?). Ну, по крайней мере, если вы полагаетесь на 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.";

Ответ 4

Что-то вроде этого, use Net::SMTP, если у вас установлен модуль, или дрянной sendmail выносок в качестве последнего средства.

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

Ответ 5

use strict;
use warnings;
use Module;

Если у вас нет модуля, вы получите сообщение об ошибке "Невозможно найти Module.pm в @INC (@INC содержит:...)". что вполне понятно.

Есть ли какая-то конкретная причина, по которой вы хотите/нуждаетесь в более конкретном сообщении?

Ответ 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 [email protected];
}