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


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


Однако вы можете сделать нечто большее, чем просто присвоить переменной значение, полученное в результате интерполяции. Так, в следующем примере мы конструируем строку с интерполированным выражением и передаем результат функции:

some_func("What you want is @{[ split /./, $rec ]} items");


1.11. Отступы во встроенных документах   47

Интерполяция может выполняться и во встроенных документах:

die  "Couldn't send mail" unless send_mail(«"EOTEXT",   Starget);

To:   $naughty

From: Your bank

Cc: @{ get_manager_list($naughty) }

Date: @{[ do { my $now = 'date'; chomp $now; $now} ]} (today)

Dear Jnaughty,

Today, you bounced check number @{[ 500 + int rand(100) ]> to us. Your account is now closed.

Sincerely, the management EOTEXT

Расширение строк в обратных апострофах (' ') оказывается особенно творче­ской задачей, поскольку оно часто сопровождается появлением ложных символов перевода строки. Создавая блок в скобках за @ в разыменовании анонимного мас­сива @{[]}, как это было сделано в последнем примере, вы можете создавать за­крытые (private) переменные.

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

В версии 5.004 Perl в выражении ${\EXPR } значение EXPR ошибочно вычисля­лось в списковом, а не скалярном контексте. Ошибка была исправлена в вер­сии 5.005.

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

perlref(l).

1.11. Отступы во встроенных документах

Проблема

При использовании механизма создания длинных строк (встроенных докумен­тов) текст должен выравниваться вдоль левого поля; в программе это неудобно. Требуется снабдить отступами текст документа в программе, но исключить от­ступы из окончательного содержимого документа.

Решение

Воспользуйтесь оператором s/// для отсечения начальных пропусков:




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



Книжный магазин