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


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


'$AGE

В результате мы возвращаемся к исходной строке. Чтобы получить значение переменной, необходимо снова вычислить результат. Для этого в строку добавля­ется еще один модификатор /е:

$text =~ s/(\$\w+)/$1/eeg;    # Находит переменные глу()

Да, количество модификаторов /е может быть любым. Только первый моди­фикатор компилируется вместе с программой и проверяется на правильность синтаксиса. В результате он работает аналогично конструкции eval {BLOCK}, хотя и не перехватывает исключений. Возможно, лучше провести аналогию с do  {BLOCK}.

Остальные модификаторы /е ведут себя иначе и больше напоминают конструк­цию eval "STRING". Они не компилируются до выполнения программы. Малень­кое преимущество этой схемы заключается в том, что вам не придется вставлять в блок директиву no  strict   ' refs1. Есть и другое огромное преимущество: этот


1.9. Преобразование регистра   43

механизм позволяет находить лексические переменные, созданные с помощью ту, — символическое разыменование на это не способно.

В следующем примере модификатор /х разрешает пропуски и комментарии в шаблоне подстановки, а модификатор /е вычисляет правостороннее выражение на программном уровне. Модификатор /е позволяет лучше управлять обработкой ошибок или других экстренных ситуаций:

# Расширить переменные в $text    Если переменная не определена, й вставить сообщение об ошибке. $text =~ s{

\$                                               й Найти знак доллара

(\w+)                                           и Найти "слово1 и сохранить его в $1

Н

no strict   'refs'; if (defined $$1)  {

$$1;                                      # Расширять только глобальные переменные

} else {

"[NO VARIABLE'  \$$1];     й Сообщение об ошибке } }едх;

Обратите внимание на изменение синтаксиса $$1 в Perl 5.004; когда-то это вы­ражение означало ${$}1, а теперь оно означает ${$1}. Для обеспечения обратной совместимости в строках оно сохраняет старый смысл (но выдает предупрежде­ние с -w). Запись ${$1} используется в строках для того, чтобы предотвратить ра­зыменование PID. Если значение $$ равно 23448, то $$1 в строке превращается в 234481, а не в значение переменной, имя которой хранится в $1.




Начало  Назад  Вперед