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


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


Также можно воспользоваться стандартным модулем Text::Tabs:

use Text   Tabs,

@expanded_lmes    = expand(@lines_with_tabs),

@>tabulated_lines =  unexpand(<s>lines_without_tabs),

Комментарий

Если позиции табуляции следуют через каждые N символов (где N обычно равно 8), их несложно преобразовать в пробелы. В стандартном, «книжном» ме­тоде не используется модуль Text::Tabs, однако разобраться в нем непросто. Кро­ме того, в нем используется переменная $ , одно упоминание которой замедляет поиск по шаблону в программе. Причина объясняется в разделе «Специальные переменные» введения к главе 6.

while (о)  {

1 while s/\t+/' ' х length($&) • 8 - length($ ) % 8)/e, print,

Вы смотрите на второй цикл while и не можете понять, почему его нельзя было включить в конструкцию s///g? Потому что вам приходится каждый раз заново пересчитывать длину от начала строки (хранящуюся в $'), а не от последнего со­впадения.


1.8. Расширение переменных во входных данных   41

Загадочная конструкция 1 while CONDITION эквивалентна while (CONDITION) {}, но более компактна. Она появилась в те дни, когда первая конструкция работа­ла в Perl несравнимо быстрее второй. Хотя сейчас второй вариант почти не усту­пает по скорости, первый стал удобным и привычным.

Стандартный модуль Text::Tabs содержит функции преобразований в обоих направлениях, экспортирует переменную $tabstop, которая определяет число про­белов на символ табуляции. Кроме того, это не приводит к снижению быстродей­ствия, потому что вместо $& и $  используются $1 и $2:

use Text Tabs,

Stabstop = 4,

while (<>) { print expand($_) }

Модуль Text::Tabs также может применяться для «сжатия» табуляции. В сле­дующем примере используется стандартное значение $tabstop, равное 8:

use Text Tabs,

while (о) { print unexpand($_) }

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

Страница руководства модуля Text::Tabs; описание оператора s/// Bperlre(l) и perlop(l).




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



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