Установка экспортированной константы perl - PullRequest
2 голосов
/ 13 июля 2020

Я использую модуль ( Mail :: SPF :: Iterator ), который экспортирует константу для включения вывода отладки:

use Mail::SPF::Iterator Debug =>1; # enable debugging

Как я могу установить эту константу позже в код например в зависимости от условия?

if ( my condition ) {
   # set Debug to 1
}

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

Аргументы для use являются просто аргументами метода import используемого пакета. Команда use запускается во время компиляции, поэтому либо используйте блок BEGIN

BEGIN {
    my $do_i_want_to_debug = ... ;
    use Mail::SPF::Iterator Debug => $do_i_want_to_debug;
}

, либо, если вы не знаете всего, что необходимо для определения значения во время компиляции, используйте , требуйте вместо use:

my $do_i_want_to_debug = ... ;
require Mail::SPF::Iterator;
Mail::SPF::Iterator->import(Debug => $do_i_want_to_debug);
1 голос
/ 13 июля 2020

Константа Perl обычно является просто определением подпрограммы, поэтому вы бы сказали

if (condition) {
    no warnings 'redefine';
    *Debug = sub () { 1 };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...