[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: suggest an MTA please



Theodore Alexandrov wrote:

> On Fri, Sep 07, 2001 at 01:20:46PM +0300, Alexei Khlebnikov wrote:
> >
> > Кстати, для фильтрации текста гораздо лучше подходит sed+awk, или даже просто
> > awk, нежели perl. Awk именно для этого и создан, в отличие от perl, который
> > "мастер на все руки".
>
> perl был создан именно для обработки текста
>
> "He [Larry Wall, Th.A.] created Perl when he was trying to produce
>  some reports from a Usenet-news-like hierarchy
>  of files for a bug-reporting system, and awk
>  ran out of steam."
>         "Learning perl" by Randal Schwartz,
>                            Tom Christiansen &
>                            Larry Wall

Был, конечно, создан. Но теперь для него создано столько всяких модулей, что
теперь [мне] его трудно назвать "языком для обработки текста". По моему мнению,
теперь перл - многоцелевой язык. Его универсальность привела к тому, что [мне] в
большинстве случаев удобнее использовать другие (специлизированные для этой
задачи) языки для каких-то нужд:
для обработки текста - awk
для администрирования и возни с файлами - bash
для разработки больших программ - С++

Признаю, был случай, когда мне не хватило мощности awk. Надо было сматчить текст с
регулярным выражением длиной ок. 2Мб (ок. 2 милионов символов). Awk обломался
переварить такую длинную строчку. Perl долго думал, зажрал много памяти, но
переварил.

Еще perl, если верить bagley.org, очень быстро матчит регулярные выражения, даже
немного быстрее чем awk (gawk). Правда, в тестах не был проверен mawk, который, по
утверждениям создателей, гораздо быстрее работает, чем gawk. Кстати, к чести
Дебиана, по умолчанию в Дебиане ставится именно mawk (входит в base system).

А, чуть не забыл, perl хорошо использовать для CGI, если стоит web-сервер, не
понимающий PHP.

Хочу бросить ложку дегтя в sed. У него есть большой минус, а именно: когда он
матчит входной текст, он пытается сопоставить рег. выражение всему тексту. Поэтому
чем больше текст, тем медленнее он работает. Замедление скорости растет очень
быстро. В нашей конторе проводились тесты. На логарифмическом графике (на оси Х
была длина регулярного выражения, на оси Y - время обработки тестового файла с
текстом) кривая sed'a была сильно загнута вверх, в отличие от остальных. Это
означало резкое падение скорости. Надо сказать, это были довольно экстремальные
тесты, максимальная длина регулярных выражений превашала 1000. Так что в обычных
условиях применение sed'a вполне оправдано.

Awk - мой выбор. Он изначально сделан как фильтр, поэтому легче писать скрипт и он
более понятен. Обычно какую-то вещь можно сделать на perl несколькими способами,
на awk - одним. Это также вносит элемент организованности. К тому же, awk может
разделять на записи входной текст любым регулярным выражением, а perl этого не
умеет. Можно, конечно, зачитать весь файл в переменную, а потом разбить ее, но это
гораздо дольше, а для больших файлов вообще неприемлимо.




Reply to: