Spec-Zone.ru › Perl 5.32

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 приведёт к значению true; она не имеет эффекта, если CONDITION приведёт к значению false. (Имя модуля, предполагая, что оно содержит как минимум одну ::, должно быть заключено в кавычки, когда '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–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.32.0/if

Spec-Zone.ru

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