Spec-Zone.ru › Perl 5.28

if

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНТАКСИС
  • ОПИСАНИЕ
    • использование if
    • без 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–2020 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.28.3/if

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API