PERL: БИБЛИОТЕКА ПРОГРАММИСТА



              

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 349


Другая интересная возможность заключается в том, чтобы функция могла уз­нать о полном игнорировании возвращаемого ею значения (то есть о том, что она вызывается в неопределенном контексте). В этом случае возвращение кода ошиб­ки бесполезно, поэтому вместо него следует инициировать исключение.

Конечно, вызов функции в другом контексте еще не означает, что возвращае­мое значение будет должным образом обработано. Но в неопределенном контек­сте оно заведомо не проверяется.

if (defined wantarrayO)  {

return; }  else {

die "pay attention to my error!"; }

> Смотри также ——-----------------------------------------------------------------

Описание переменной $@ вperlvar(i); описание функций die и eval вperlfunc(l); рецепты 10.15, 12.2 и 16.21.


366   Глава 10 • Подпрограммы

10.13. Сохранение глобальных значений

Проблема

Требуется временно сохранить значение глобальной переменной.

Решение

Воспользуйтесь оператором local, чтобы сохранить старое значение и автомати­чески восстановить его при выходе из текущего блока:

$аде = 18;                    # Глобальная переменная

if  (CONDITION)   {

local $age = 23;

func();       # Видит временное значение 23 } # Восстановить старое значение при выходе из блока

Комментарий

К сожалению, оператор Perl local не создает локальной переменной — это делает­ся оператором my. local всего лишь сохраняет существующее значение на время выполнения блока, в котором он находится.

Однако в трех ситуациях вы должны использовать local вместо ту.

1. Глобальной переменной (особенно $_) присваивается временное значение.

2.       Создается локальный манипулятор файла или каталога или локальная
функция.

3.       Вы хотите временно изменить один элемент массива или хэша.

Применение local() для присваивания временных значений глобальным переменным

Первая ситуация чаще встречается для стандартных, нежели пользовательских переменных. Нередко эти переменные используются Perl в высокоуровневых опе­рациях. В частности, любая функция, явно или косвенно использующая $_, долж­на иметь локальную копию $_. Об этом часто забывают. Одно из возможных ре­шений приведено в рецепте 13.15.




Содержание  Назад  Вперед