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


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


pnnt(  ($i++ & 1) ? $_      ($change{$J   ||  $_)),

 

_ END__

analysed

=>

analyzed

built-in

=>

builtm

chastized

=>

chastised

commandlme

=>

command-line

de-allocate

=>

deallocate

dropin

=>

drop-in

hardcode

=>

hard-code

meta-data

=>

metadata

multicharacter

=>

multi-character

multiway

=>

multi-way

non-empty

=>

nonempty


1.18. Программа: psgrep   61

non-profit          => nonprofit

non-trappable  => nontrappable

pre-define        => predefine

preextend            => pre-extend

re-compilmg    =>  recompiling

reenter              =>  re-enter

turnkey              => turn-key

В новой версии программы каждая строка разбивается на пропуски и слова (относительно медленная операция). Затем слова используются для поиска заме­ны в хэше, что выполняется существенно быстрее подстановки. Следовательно, первая часть работает медленнее, а вторая — быстрее. Выигрыш в скорости зави­сит от количества совпадений.

Если бы мы не старались сохранить количество пропусков, разделяющих сло­ва, нетрудно сделать так, чтобы вторая версия не уступала первой по скорости даже при небольшом количестве замен. Если вам хорошо известны особенности входных данных, пропуски можно заменить одиночными пробелами. Для этого применяется следующий цикл:

U Работает очень быстро, но со сжатием пропусков while (о) {

for (split) {

print $change{$_}   ||   $_,

}

print    \n  ,

>

В конце каждой строки появляется лишний пробел. Если это нежелательно, воспользуйтесь методикой рецепта 16.14 и создайте входной фильтр. Вставьте следующий фрагмент перед циклом while, сжимающим пропуски:

my $pid = open(STDOUT,  |= ),

die cannot fork $'  unless defined $pid,

unless ($pid) {

while (<STDIN>) {

s/ $//,

print,

exit,

1.18. Программа: psgrep

Многие программы (в том числе ps, netstat, Is —I, find -Is и tcpdump) часто выдают большие объемы данных. Файлы журналов тоже быстро увеличиваются в разме­рах, что затрудняет их просмотр. Такие данные можно обработать программой-фильтром типа дгер и отобрать из них лишь часть строк, однако регулярные вы­ражения плохо согласуются со сложной логикой — достаточно взгляну 1Ь па ухищрения, на которые приходится пускаться в рецепте 6.17.




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



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