Я хотел иметь возможность сделать это в Perl (ниже приведен код Python lol)
try:
import Module
except:
print "You need module Module to run this program."
Кто-нибудь знает, как это сделать?
Я хотел иметь возможность сделать это в Perl (ниже приведен код Python lol)
try:
import Module
except:
print "You need module Module to run this program."
Кто-нибудь знает, как это сделать?
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.
Вы можете использовать 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';
}
Для этого существует множество модулей; см. список модулей 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.";
Что-то вроде этого, use Net::SMTP
, если у вас установлен модуль, или дрянной sendmail
выносок в качестве последнего средства.
my $mailmethod = eval "use Net::SMTP; 1" ? 'perl' : 'sendmail';
use strict; use warnings; use Module;
Если у вас нет модуля, вы получите сообщение об ошибке "Невозможно найти Module.pm в @INC (@INC содержит:...)". что вполне понятно.
Есть ли какая-то конкретная причина, по которой вы хотите/нуждаетесь в более конкретном сообщении?
Вот как я это делаю:
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];
}