Вернуться на Страничку новостей.

27.01.2008

Внимательный посетитель сайта заметит, что появилась новая рубрика "Perl"

Каких-только нет языков программирования! Каждый язык под свою задачу "заточен". Дело в том, что у меня на полке года наверно два лежала книга Керниган и Пайк "Практика программирования". Купил, полистал и поставил на полку. Да видно пришло время достать и перечитать ее. Дак вот книга-то эта весьма интересна, и отличается от обычных учебников по программированию. Но будет еще время поговорить об этой книге. В главе 9.3 Программируемые инструменты (читай - языки программирования) говорится в частности:

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

Хорошим примером сказанного является инструмент Unix под названием eqn, который обрабатывает математические формулы. Язык, применяемый в нем для ввода очень похож на обычный язык: например, выражение пи/2 в этом языке так и записывается - pi over two.

Язык Awk развился из программы, которая использовала регулярные выражения для выявления аномалий в записях телефонного трафика; Теперь же Awk содержит в себе переменные, выражения, циклы и тд - и это делает его полноценным языком программирования.

Языки Perl и Tcl первоначально проектировались с целью совместить удобство и выразительность малых языков с мощью полноценных языков программирования. В результате появились действительно удобные языки программирования общего назначения, хотя конечно чаще всего их используют для обработки текста.

Для подобных инструментов применяют общий термин - языки скриптов. Такое название объясняется их происхождением от ранних командных интерпретаторов, вся программируемость которых ограничивалась исполнением заранее написанных сценарием (скриптов).

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

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

Далее Керниган в этой главе приводит код небольшой скриптовой программы, состоящей из трех скриптов, каждый скрипт написан на разном языке (Tcl, Perl, Awk).

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

Первый модуль написан на языке Tcl. Текст, заключенный в квадратные скобки выполняется как команда Tcl и заменяется результирующим текстом. Этот скрипт как правило производит доволно объемистый вывод, большую часть которого составляют теги HTML.

Perl удобен для текстовых подстановок, так что вторым модулем программы станет скрипт на Perl, который использует регулярные выражения и подстановки для удаления тегов:

Третий модуль написан на языке fmt.awk. Мы часто используем fmt для того, чтобы заново разбить на абзацы почтовые сообщения и другие короткие документы; ее же мы использовали в гл 3 для форматирования вывода программы markov.

Собрав все написанное воедино, мы получим совершенно идиотский, но функционирующий web-браузер, реализованный как скрипт командного интерпретатора, состоящий из одной строки:

# web: получает web-страницу и форматирует ее текст
# игнорируя HTML

geturl.tcl $1 | unhtml.pl | fmt.awk

Такой вызов получит web-страницу, отбросит все управление и форматирование и отформатирует текст по своим собственным правилам. Получился быстрый способ достать страницу текста из web.

Отметьте, что мы неспроста использовали сразу несколько языков (Tcl, Perl, Awk) и в каждом из них - регулярные выражения. Собственно говоря мощь различных нотаций состоит как раз в подборе наилучшего варианта (языка) для каждой проблемы.

Tcl - особенно хорош для получения текста из сети.
Perl и Awk прекрасно редактируют и форматируют текст, а регулярные выражения - отличный способ определения фрагментов текста, которые должны быть найдены и изменены. Объединение всех этих языков получается гораздо более мощным, чем любой из них в отдельности. Целесообразно разбить задачу на части, если можно выиграть за счет составления правильной нотации (выбора языка для каждой задачи) в каждой из них.

Hosted by uCoz