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


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


Следующая программа переформатирует и слишком короткие, и слишком длинные строки абзаца по аналогии с программой fmt. Для этого разделителем входных записей $/ назначается пустая строка (благодаря чему о читает целые абзацы), а разделителем выходных записей $\ — два перевода строки. Затем абзац преобразуется в одну длинную строку посредством замены всех символов пере­вода строки (вместе с окружающими пропусками) одиночными пробелами. На­конец, мы вызываем функцию wrap с пустыми отступами первой и всех последу­ющих строк.


1.13. Служебные преобразования символов   53

use Text    Wrap             qw(&wrap $columns),

use Term    ReadKey        qw(GetTerminalSize),

($columns)  = GetTerminalSize(),

($/,  $\) = (     ,    \n\n ),        ft Читать по абзацам,   выводить два перевода строки

while (о)  {                                # Читать весь абзац

s/\s*\n\s*/ /g,                    # Заменить промежуточные переводы строк пробелами

print wrap(   ',   '',   $_),   # и отформатировать

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

Описание функций split и join вperlfunc(l), страница руководства стандарт­ного модуля Text::Wrap. Применение модуля Term::ReadKey с CPAN продемон­стрировано в рецепте 15.6.

1.13. Служебные преобразования символов

Проблема

Некоторые символы выводимой строки (апострофы, запятые и т. д.) требуется преобразовать к специальному виду. Предположим, вы конструируете формат­ную строку для sprintf и хотите преобразовать символы % в %%.

Решение

Воспользуйтесь подстановкой, которая снабжает префиксом \ или удваивает каждый преобразуемый символ:

#  Обратная косая черта

$var ="  s/([CHARLIST])/\\$1/g,

#  Удвоение

$var ="  s/([CHARLIST])/$1$1/g,

Комментарий

В приведенных выше решениях $var — модифицируемая переменная, a CHARLIST — список преобразуемых символов, который может включать служебные комбина­ции типа \t или \п. Если преобразуется всего один символ, можно обойтись без скобок:




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