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


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


П Обратная перестановка слов

$string =   'Yoda said,   "can you see this?"';

@>allwords = split("  ",   Sstring);

@revwords = join("  ",   reverse @allwords);

print $revwords,   "\n";

this?"   see  you   "can   said,   Yoda

Временный массив @allwords можно убрать и сделать все в одной строке:

$revwords = ]oin("  ",   reverse split("  ",   $string);

Смежные пропуски в $string превращаются в один пробел в Srevwords. Что­бы сохранить существующие пропуски, поступите так:

Srevwords = join("", reverse split (/(S+)/, $string));

С помощью функции reverse можно проверить, является ли слово палиндро­мом (то есть читается ли одинаково в обоих направлениях):

Sword = "reviver";

$is_palmdrome =  (Sword eq  reverse(Sword));

Программа для поиска длинных палиндромов в файле /usr/dict/words записы­вается в одну строку:

% perl -nle   'print if $_ eq  reverse && length >5'  /usr/dict/words deedeed

deified

denned

hallah

kakkak

murdrum

redder

repaper

retter

reviver

rotator

sooloos

tebbet

terret

tut-tut


40    Глава 1 • Строки

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

Описание функций split, reverse и scalar в perlfunc(l); раздел «Switches» perlrun(l).

1.7. Расширение и сжатие символов табуляции

Проблема

Требуется преобразовать символы табуляции в строке в соответствующее коли­чество пробелов, или наоборот. Преобразование пробелов в табуляцию сокраща­ет объем файлов, имеющих много смежных пробелов. Преобразование симво­лов табуляции в пробелы может понадобиться при выводе на устройства, которые не понимают символов табуляции или считают, что они находятся в других пози­циях.

Решение

Примените подстановку весьма странного вида:

while (Sstnng =" s/\t+/        x length($&)  * 8 - length($ ) % 8)/e)  { it Выполнять пустой цикл до тех пор, # пока выполняется условие подстановки




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



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