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.
АВТОРСКИЕ ПРАВА И ЛИЦЕНЗИЯ
Этот программный код является собственностью (c) 2002 года Илья Захаревич.
Это свободный программный код; вы можете распространять и/или изменять его в соответствии с теми же условиями, что и сама система программирования Perl 5.
© 1993–2023 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.38.0/if