И наоборот, сразу после создания таблицы частот пар сервер получает возможность генерировать текст пародии намного быстрее, чем сеть может его переслать. Поэтому необходимо предусмотреть для пользователя возможность прервать входящий поток текста, опять-таки, путем выдачи сигнала об отправке срочных данных. Таким текстом может стать, например, статья, где описывается установка windows 7 на новый ноутбук или любая другая.
Для этой пары клиента/сервер, кроме всех стандартных модулей, нужны еще три внешних: Sockatmark, который уже рассматривался, Text::Travesty, генератор пародий, и IO::Getline, неблокирующая альтернатива функции getline () языка Реrl. В данном случае модуль IO::Getline применяется не ради его неблокирующих средств, а в силу предусмотренной в нем возможности очищать внутренний строковый буфер при вызове метода flush().
Модуль Text::Travesty
Алгоритм создания пародий реализован в небольшом модуле Text::Travesty. Его исходный код приведен в Приложении А, “Дополнительный исходный код”. Он может быть также получен из архива CPAN: Этот модуль был создан на основе небольшого демонстрационного приложения, которое находится в каталоге дистрибутива Perl. Как и другие модули, приведенные здесь, он является объектно-ориентированным. Выполнение программы начинается с создания нового объекта Text::Travesty с помощью метода Text::Travesty->new (). Затем вызывается метод add( ) один или несколько раз для анализа частоты слов в отрывке текста.
$t->add($text);
После анализа текста можно генерировать текстовую пародию путем вызова метода generate () или pretty_text ().