Как я могу условно импортировать пакет в Perl? - PullRequest
3 голосов
/ 18 октября 2010

У меня есть 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;
}

Ответы [ 4 ]

6 голосов
/ 18 октября 2010

Вы можете использовать require для загрузки модулей во время выполнения и eval для перехвата возможных исключений:

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

См. Также perldoc use .

4 голосов
/ 18 октября 2010

Рассмотрим , если прагма.

use if CONDITION, MODULE => ARGUMENTS;
2 голосов
/ 18 октября 2010

Я рекомендую использовать Module::Load, чтобы намерение стало ясным .

Редактировать: игнорировать комментарии, Модуль :: Загрузка вядро .

0 голосов
/ 19 октября 2010

Другой подход заключается в использовании метода load_class класса :: MOP.Вы можете использовать его следующим образом:

Class :: MOP :: load_class ('foobar', $ some_options)

Выдает исключение, поэтому вам придется ловитьтот.Дополнительная информация здесь .

Кроме того, хотя это не обязательно для каждой системы, Class :: MOP чрезвычайно полезен, и Moose становится все более распространенным с каждым днем, вероятно, в вашей системе..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...