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


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


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

Документация по стандартным модулям Text::Soundex и User::pwent; man-страница passwd(5) вашей системы; «Искусство программирования», том 3, глава 6.

1.17. Программа: fixstyle

Представьте себе таблицу с парами устаревших и новых слов. Старые слова       Новые слова

bonnet

hood

rubber

eraser

lorrie

truck

trousers

pants

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

При вызове без файловых аргументов программа выполняет функции просто­го фильтра. Если в командной строке передаются имена файлов, то в них помеща­ются результаты, а прежние версии сохраняются в файлах с расширениями *.orig (см. рецепт 7.9). При наличии параметра командной строки -v сообщения обо всех изменениях записываются в STDERR.

Таблица пар «исходное слово/заменитель» хранится в основной программе, на­
чиная с_ END (см. рецепт 7.6). Каждая пара преобразуется в подстановку и на­
капливается в переменной $code так же, как это делается в программе popgrep2 из
рецепта 6.10.


1.17. Программа: fixstyle   59

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

Пример 1.4. fixstyle

#!/usr/bin/perl -w

# fixstyle - замена строк секции <DATA> парными строками

#  использование: $0 [-v] [файлы...]
use strict;

my Sverbose = (@ARGV && $ARGV[O] eq '-v' && shift);

if (@ARGV) {

$"I = ".orig";      # Сохранить старые файлы } else {

warn "$0: Reading from stdin\n" if -t STDIN;

my $code = "while (<>) {\n";

# Читать данные и строить код для eval

while (<OATA>) {

chomp;

my ($in, $out) = split /\s*=>\s*/;

next unless $in && $out;




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