Spec-Zone.ru › Perl 5.30

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 имеет значение true, тогда вышеприведенная строка имеет такой же эффект, как:

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.30.3/if

Spec-Zone.ru

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