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


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



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

бы вывод каждого символа сопровождался небольшой паузой — текст будет по­являться перед аудиторией в замедленном темпе, и его будет удобнее читать.

Пример 1.1. slowcat

#!/usr/bin/perl

# slowcat -замедленный вывод

#  использование: slowcat [-DELAY] [files...],
« где DELAY - задержка

SDELAY = ($ARGV[O] =~ /"-([.\d]+)/) ? (shift, $1) : 1;

$| = 1; while (<>) {

for (split(//)) { print; select(undef,undef,undef, 0.005 ¦ $DELAY);

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

Описание функций split и unpack в perlfunc(l); применение select для органи­зации задержки объясняется в рецепте 3.10.

1.6. Обратная перестановка слов или символов

Проблема

Требуется изменить порядок символов или слов в строке на противоположный.

Решение

Для перестановки байтов воспользуйтесь функцией reverse в скалярном кон­тексте:

Srevbytes =  reverse($string);

Для перестановки слов воспользуйтесь reverse в списковом контексте с функ­циями split и join:

$revwords = join("  ",   reverse split("  ",  Sstring);

Комментарий

У функции reverse существуют два варианта применения. В скалярном контек­сте функция объединяет аргументы и возвращает полученную строку в обратном порядке. В списковом контексте функция возвращает аргументы в обратном по­рядке. При использовании reve rse для перестановки символов в неочевидной си­туации используйте функцию scalar для форсированного применения скалярно­го контекста.


1.6. Обратная перестановка слов или символов   39

Sgnirts =  reverse($string);       tt Перестановка символов $string Ssdrow    = reverse(@words);        tt Перестановка элементов @sdrow

Sconfused = reverse(@words);     tt Перестановка букв в join("",  ©words)

Приведем пример обратной перестановки слов в строке. Пробел (" ") в каче­стве шаблона split является особым случаем. Он заставляет split использовать в качестве разделителя смежные пропуски (whitespace) и отбрасывать начальные пустые поля (по аналогии с awk). Обычно split отбрасывает только конечные пустые поля.




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