UnixMountainSkiFun

Unix Горы Лыжи

29-04-2008 11:49

Вступление


Последние пять лет отмечены взрывом интереса к Perl. Причиной тому явилось то, что Perl стал популярен, когда был адаптирован и стал языком de facto, для создания WWW-контента. Мощнейшие Perl-овые средства для манипулирования текстом явились очевидным выбором для написания Common Gateway Interface (CGI) скриптов. Во времена пробуждения интереса к web-у, Perl стал, на нынешний момент, одним из наиболее популярных языков программирования.

К сожалению, использование Perl для CGI-программирования имело побочный эффект, -- ныне зачастую бытует ошибочное мнение, что это единственная функция Perl. Некоторые пользователи считают, что Perl был разработан для использования в CGI-программировании. Это совершеннейшая чушь, так как Perl на самом-то деле был разработан задолго до разработки протокола CGI.

Таким образом, эта книга вовсе не о том, как писать CGI-скрипты, а о компьютерных задачах другого рода, для которых Perl подходит лучше всего -- обработка данных.

Обработка данных включает в себя все те нудные, повседневные задачи, которым, большинство программистов уделяют львиную долю своего времени -- задачи конвертирования данных из одного формата в другой. Эта фраза подводит нас к определению того, чем собственно является программирование: получение входных данных (input data), обработка ("munging"), полученных данных, и наконец выдача выходных данных (output data). Это именно то, чем большинство программистов занимаются бОльшую часть своего времени.

Perl особенно хорош в задачах такого рода. Он помогает программистам разрабатывать программы конвертирования весьма быстро. По сути дела, те самые характеристики, которые делают Perl идеальным для CGI-программирования, являются лучшими и для обработки данных. (CGI-программы -- это в действительности программы обработки данных, только в за карнавальной маской.)

Поддерживая слоган сообщества Perl, "There's more than one way to do it" (прим.перев.: "Имеется более чем один способ сделать это"), настоящая книга исследует многочисленные подходы к решению описанной выше задачи, над различными типами данных. К счастью, данная книга обеспечит и некоторые новые "способы сделать это", что сделает вашу программистскую жизнь более продуктивной и приятной.

Другой слоган сообщества Perl звучит так: "Perl makes easy jobs easy and hard jobs possible" ("Perl делает легкую работу легкой, а тяжелую возможной"). Надеюсь, что со временем, когда вы доберетесь до конца этой книги, то поймете, что "Perl makes fun jobs fun and boring jobs bearable" (Perl делает приятную работу приятной, а нудную терпимой).

Целевая аудитория

Эта книга для тех программистов, которые занимаются обработкой данных (в том смысле, что это является их повседневной работой), и тех, кто желает писать более эффективный код обработки данных. В этой книге я буду обсуждать технику обработки данных, знакомить вас как с новыми приемами, так и (в основном для новичков в этой области) с уже устоявшимися и широко известными методами. Не смотря на то, что некоторые методы могут быть использованы с любым языком программирования, в данной книге я использую Perl, чтобы продемонстрировать ту легкость, с которой они могут быть применены, с помощью этого разностороннего языка. Таким образом я надеюсь убедить вас в том, что Perl это гибкий и жизнеспособный инструмент для повседневного использования.

На всем протяжении этой книги, я предполагаю, что вы владеете хотя бы элементарными знаниями Perl. Всякий кто читал и понял введение в Perl не будет иметь проблем с пониманием кода, приведенного в данной книге, однако для удобства читателей (особенно для новичков в Perl-е) в Главу 1 включены мои комментарии к основным конструкциям Perl-а, а кроме того, в Приложении Б приведено краткое введение в Perl.

Об этой книге

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

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

Глава 1 вводит понятие обработки данных и Perl. Я размышляю почему именно Perl лучше всего подходит для обработки данных, исследую типы данных, с которыми вы можете столкнуться по мере того, как будете работать с механизмами получения и отправки данных (прим.перев.: receiving and sending data).

Глава 2 содержит общие приемы, которые могут быть использованы для того, чтобы сделать программы обработки данных более эффективными. Особенно важной частью этой главы является обсуждение UNIX-овского принципа фильтра (прим.перев.: UNIX filter model), для программ ввода и вывода.

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

Глава 4 вводит понятие Perl-ового поиска по шаблону, -- фундаментальной части большей части программ обработки данных.

Часть II начинает наши исследования форматов данных, рассматривая неструктурированные и запись-структурированные (прим.перев.: record-structured data) данные.

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

Глава 6 рассматривает запись-ориентированные данные. Мы разберемся с чтением и записью данных из/в единую запись, а также рассмотрим наиболее эффективные способы для расщепления записи на отдельные поля. Помимо этого, в этой главе мы более пристально рассмотрим наиболее распространенный запись-ориентированный файловый формат: файл с разделителем (CSV) (прим.перев.: comma-separated values (CSV) files), рассмотрим более сложные виды записей, рассмотрим средства Perl, для обработки данных такого рода.

Глава 7 обсуждает данные с фиксированной длинной (прим.перев.: fixed-width data) и двоичные данные. Мы сравним некоторые методы для расщепления записей с фиксированной длинной и для записи результатов в формат с фиксированной длинной. Далее, используя примеры некоторых популярных файлов в двоичном формате, мы исследуем бинарные данные.

Часть III выходит за границы простейших форматов данных в мир иерархических структур данных и парсеров (прим.перев.: parser -- программа выполняющая грамматический разбор)

Глава 8 открывает нам глаза на ограничения форматов данных, которые мы рассматривали ранее и приводит разумные доводы для того, чтобы использовать более сложные форматы. Далее мы увидим каким образом методы, которые мы использовали до этого, перестают работать на более сложных данных, таких например, как HTML. Кроме этого мы бросим беглый взгляд на теорию грамматического разбора (прим.перев.: parsing theory).

Глава 9 исследует способы извлечения полезной информации из HTML-документов. Мы рассмотрим многочисленный инструментарий для разбора HTML, доступный для Perl и обсудим его пригодность для конкретных задач.

Глава 10 обсуждает XML. Для начала, мы рассмотрим ограничения HTML и преимущества XML. Затем, мы рассмотрим грамматические анализаторы XML (прим.перев.: далее понятие parser будет переводиться как грамматический анализатор, или, для краткости, как парсер), доступные для использования с Perl.

Глава 11 демонстрирует пример как написать грамматические анализаторы для Ваших собственных структур данных, используя Perl-инструментарий, для создания парсеров (прим.перев.: parser-building tool).

Часть IV завершает наш тур кратким обзором и советами, для дальнейшего изучения данной тематики.

Приложение А' -- это руководство к большинству модулей Perl, рассматриваемых в данной книге.

Приложение Б представляет собой элементарное введение в Perl.

Шрифтовое выделение

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

  • Термины и понятия будут выделены курсивом.
  • Названия функций, файлов и модулей будут выделены моноширинным шрифтом.
  • Пример кода будут также выделены моноширинным шрифтом.
  • Данные, выдаваемые программой будут выделены жирным моноширинным шрифтом.

Следующие обозначения будут использоваться в диаграммах структур данных:

  • Массив отображается как прямоугольник. Каждая строка внутри прямоугольника

представляет собой один элемент массива. Индекс (index) отображается в левом углу строки, а значение -- в правом.

  • Хэш отображается как закругленный прямоугольник. Каждая строка внутри прямоугольника

представляет собой пару ключ/значение. Ключ указывается в левой части строки, а значение в правой.

  • Ссылка отображается как черный кружок со стрелкой, указывающей на субъект ссылки (прим.перев.: referenced variable, его иногда еще называют referent, т.е. значение, хранящееся в памяти по адресу, задаваемому ссылкой). Тип ссылки указывается слева от черного кружка.

Как загрузить исходный код примеров?

Весь исходный код примеров, представленных в этой книге, доступен для покупателей на Manning web-сайте. URL http://www.manning.com/cross/ содержит ссылку на файлы примеров.

Автор Online

Приобретая Data Munging with Perl вы получаете свободный доступ к приватному Web-форуму доступному на Manning Publications, где вы можете оставить комментарии относительно этой книги, задать технические вопросы и получить помощь автора книги и других пользователей. Чтобы получить доступ к форуму и подписаться на него, введите в вашем web-броузере http://www.manning.com/cross/. Эта страница предоставит информацию о том, как обратиться к форуму, когда вы станете зарегестрированным пользователем, на какую помощь Вы можете рассчитывать, а также правила поведения на форуме.

Manning считает важным взять на себя обязательство перед своими читателями в том, чтобы обеспечить место встречи, где может состояться весьма важный и продуктивный диалог между читателями, либо меж читателями и автором. Однако это не есть обязательства автора ответить на некоторое количество вопросов, ведь его вклад в AO (прим.перев.: Author Online -- Автор Online) остается добровольным (и неоплачиваемым). Мы просто предлагаем вам попытаться задать автору каверзные вопросы, чтобы как можно больше заинтересовать его в ответе.

Форум "Автор Online" и архивы предыдущих обсуждений будут доступны на издательском web-сайте до тех пор, пока книга находится в печати.

Благодарности

Моя сердечная признательность всем тем людям, которые сделали эту книгу возможной (и тем, чьи мотивы мне никак не понять, когда они не настаивали на том, чтобы их имена были указаны на обложке данной книги).

Larry Wall за то, что он разработал и написал Perl, без него бы эта книга была бы совсем короткой.

Marjan Bace и его персоналу в Manning за их постоянный интерес к моей книге, -- а когда-нибудь она будет окончена? Особенно хочется упомянуть Ted Kennedy за его организацию процесса проверки; Mary Piergies за ее труды над рукописью во время ее производства; Syd Brown за ответы на мои технические вопросы; Sharon Mullins и Lianna Wlasiuk за редактирование; Dottie Marsico за подбор шрифтов для рукописи и превращение исходных диаграмм во что-то более понятное; и Elizabeth Martin за работу над экземплярами рукописи.

Я весьма счастлив, что такое количество ярчайших умов Perl-сообщества проверили мою рукопись. Без этих людей книга стала бы несостоятельной из-за ошибок, поэтому я считаю своим долгом сказать спасибо Adam Turoff, David Adler, Greg McCarroll, D.J. Adams, Leon Brocard, Andrew Johnson, Mike Stok, Richard Wherry, Andy Jones, Sterling Hughes, David Cantrell, Jo Walsh, John Wiegley, Eric Winter, George Entenman.

Кроме того, большое количество людей, интересующихся Perl, было вовлечено (когда преднамеренно, а когда и нечаянно) в беседы, которые состоялись вокруг глав этой книги. Многие члены листа рассылки "London Perl Mongers" сделали свой вклад именно таким образом, например жители "Perl Monks Monastery". В особенности же я хочу сказать спасибо Robin Houston, Marcel Grunauer, Richard Clamp, Rob Partington, and Ann Barcomb.

Спасибо Sean Burke, за исправления большого количества технических неточностей, а также за то, что сделал мою прозу более удобоваримой.

Огромное спасибо Damian Conway за его постоянное внимание к рукописи, от самого начала и до конца работы над ней, а также за написание предисловия.

Проект такого размаха не может быть закончен без, столь важной для меня, поддержки со стороны друзей и семьи. Я должен сказать спасибо Jules и Crispin Leyser, John и Anna Moloney за то, что они убедили меня в том, что я должен уделить часть времени, которое тратится на книгу, на то, чтобы отдохнуть за кружечкой пива, поиграть в покер или Perudo.

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

И наконец, большое спасибо и признания в любви Gill, без поддержки, ободрения и любви которой, я никогда бы не закончил эту работу. Уверен, что последний год она должно быть сильно удивлялась, что у нее все еще есть муж, однако я могу только лишь извиниться (еще раз) и пообещать, что теперь, когда книга уже окончена, я буду мелькать перед ее глазами много чаще.

<< Предисловие | Data Munging With Perl | О иллюстрации на обложке >>


edit RightSideBar