if
СОДЕРЖАНИЕ
НАЗВАНИЕ
if - use модуль Perl, если выполняется условие
СИНТАКСИС
use if CONDITION, "MODULE", ARGUMENTS;
no if CONDITION, "MODULE", ARGUMENTS; ОПИСАНИЕ
use if
Модуль if используется для условной загрузки другого модуля. Конструкция:
use if CONDITION, "MODULE", ARGUMENTS; ... загрузит MODULE только если CONDITION истинно; она не оказывает никакого влияния, если CONDITION ложно. (Имя модуля, предполагая, что он содержит хотя бы один ::, должно быть заключено в кавычки, когда 'use strict "subs";' активно.) Если CONDITION истинно, то вышеприведённая строка эквивалентна:
use MODULE ARGUMENTS; Например, функция charinfo модуля Unicode::UCD будет использовать две функции из Unicode::Normalize только в том случае, если выполняется определённое условие:
use if defined &DynaLoader::boot_DynaLoader,
"Unicode::Normalize" => qw(getCombinClass NFD); Предположим, вы хотите, чтобы ARGUMENTS было пустым списком, т.е., чтобы это имело эффект:
use MODULE (); Этого нельзя сделать с помощью псевдонима if; однако, вы можете добиться этого эффекта во время компиляции с помощью:
BEGIN { require MODULE if CONDITION }
no if
Конструкция no if используется в основном для деактивации категорий предупреждений, когда эти категории генерируют излишний вывод в определённых версиях perl.
Например, категория предупреждений redundant была введена в Perl-5.22. Это предупреждение отмечает определённые случаи избыточных аргументов для printf и sprintf. Но если ваш код работал без предупреждений в более ранних версиях perl и вас не беспокоят предупреждения redundant в более новых версиях, вы можете вызвать:
use warnings;
no if $] >= 5.022, q|warnings|, qw(redundant);
my $test = { fmt => "%s", args => [ qw( x y ) ] };
my $result = sprintf $test->{fmt}, @{$test->{args}}; Конструкция no if предполагает, что модуль или псевдоним правильно реализовали метод unimport(), – но большинство модулей и псевдонимов этого не делают. Это объясняет, почему конструкция no if имеет ограниченное применение.
ОШИБКИ
В текущей реализации невозможно указать требуемую версию модуля.
СМОТРИТЕ ТАКЖЕ
Module::Requires может использоваться для условной загрузки одного или нескольких модулей с ограничениями, основанными на версии модуля. Однако, в отличие от if, Module::Requires – это не основной модуль.
Module::Load::Conditional предоставляет ряд функций, которые вы можете использовать для запроса доступности модулей и последующей загрузки одного или нескольких из них во время выполнения.
Модуль provide из CPAN может быть использован для выбора одного из нескольких возможных модулей для загрузки, исходя из версии используемого Perl.
АВТОР
Илья Захаревич mailto:ilyaz@cpan.org.
АВТОРСКИЕ ПРАВА И ЛИЦЕНЗИЯ
Этот программный продукт является собственностью (с) 2002 года Илья Захаревич.
Это свободное программное обеспечение; вы можете распространять его и/или изменять его на тех же условиях, что и система программирования Perl 5.
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.36.0/if