Некоторые сведения о Perl 5
Данная книга представляет собой справочное пособие по языку программирования Perl версии 5. В данной книге ожидается, что читатель имеет некоторый опыт программирования, но не требует опыт программирования в Perl.
В книге приведены базовые сведения по языку Perl и некоторые паттерны программирования в нем. Рассмотрены все базовые возможности языка и основные модули интерпретатора perl. Книгу следует читать по порядку, так как последующие главы требуют знания и понимания предыдущих. Местами материал может забегать вперед.
С самого начала книги весь код нарочно приводится без директивы
use strict;
чтобы читатель сначала увидел как язык программирования выглядит без нее. Тем не менее, в реальных проектах эта директива должна обязательно включаться, так как она убережет начинающего Perl-программиста от глупых ошибок.
Материал книги вращается вокруг 5 версии языка и не привязан к конкретной версии интерпретатора, тем не менее, если в тексте это будет важно для контекста, об этом будет сказано отдельно.
Почему Perl
правитьЯзык Perl был создан в 1987 году и имеет много архаичных черт, характерных для языков программирования того времени. Если вы пришли к этому языку будучи Python-программистом, ко многому придется очень долго привыкать.
Perl довольно сложный язык, особенно если вы никогда не программировали на Си, не писали на языках командных оболочек и не пробовали писать что-нибудь для AWK.
Perl это определенно не тот язык, который стоит изучать первым. Этот язык обладает следующими преимуществами:
- встроенные и очень простые средства для работы со сложными структурами;
- свободный синтаксис, благодаря чему одна и та же задача может решаться разными способами;
- огромное число готовых библиотек, решающих самые разные задачи;
- встроенная поддержка регулярных выражений — гордость Perl. Регулярные выражения в Perl работают в среднем очень быстро. Это отчасти связано с тем, что язык разрабатывался как анализатор больших текстовых массивов;
- поддержка различных парадигм программирования: процедурная, объектно-ориентированная (ООП) и функциональная;
- динамическая типизация;
- автоматическое выделение и освобождение памяти (по методу подсчета ссылок);
- кроссплатформенность;
- свободное распространение интерпретатора и открытость его исходного кода.
Perl хорошо зарекомендовал себя в следующих областях:
- системное администрирование: автоматизация процессов, сбор информации и формирование отчетов;
- фильтры электронной почты;
- когда-то на нем активно писали CGI-сценарии, но сейчас первенство в этом забрал больше PHP;
- написание всевозможных web-серверов;
- написание web-клиентов.
На Perl можно писать прототипы для больших программ, а также можно постигать основы системного программирования.
Краткая история языка
правитьЯзык Perl был придуман в 1987 программистом компании Unisys Ларри Уолом (лингвистом по образованию). В какой-то момент Ларри понадобился простой инструмент для создания отчетов о содержании многочисленных текстовых файлов в среде Unix. На тот момент существовало два широко используемых инструмента для разбора текстовых файлов — Sed и AWK, — но к разочарованию Ларри он уперся в их ограничение на число одновременно открытых файловых дескрипторов. Отчасти это и побудило Ларри разработать новый язык для извлечения и составления отчетов — Perl (Practical Extraction аnd Report Language).
По мере роста потребностей Ларри, он добавлял в язык все больше и больше возможностей, и Perl уже перестал быть похожим на язык для сбора отчетов, а становился языком общего назначения. Со временем Ларри сделал язык и код интерпретатора открытым для всех желающих, после чего язык стремительно начал набирать популярность. Пика популярности он достиг в 2000–2006 годах. В эти годы и была написана внушительная часть модулей CPAN.
На становление Perl повлияли в первую очередь Sed, AWK, Си, Basic, LISP и языки командной оболочки (в первую очередь Bourne Shell). Быстрому распространению языка способствовало то, что он уже был похож на языки, которые многие знали. В первую очередь синтаксис Perl напоминал помесь языка командной оболочки и Си; программы Perl не требовалось компилировать, точнее они компилировались на ходу или, другими словами, не нужно было предварительно составлять make-файлы, что экономило время; язык мог решать повседневные задачи, которые решались в командной оболочке, при этом код выполнялся в разы быстрее, а синтаксический анализатор уберегал программиста от ошибок.
Активно пользуясь языком, многие программисты направляли Ларри свои пожелания, которые в основном удовлетворялись. В 1990-х, по мере развития сети Интернет, язык становится излюбленным инструментом Web-разработки для создания динамических сайтов.
История в датах:
- 18 декабря 1987 года анонсирована и выпущена версия 1.0.
- В 1988 году был выпущен Perl 2, основным нововведением которого был переработанный механизм регулярных выражений.
- В 1989 году был выпущен Perl 3. В язык была добавлена возможность обработки двоичных данных.
- В 1991 году была выпущена «Верблюжья книга» — Programming Perl, которая де-факто стала учебником по языку Perl. В то же время была поднята версия языка до Perl 4. Разработка этой версии остановилась в 1993 году на версии 4.036.
- В 1994 начата разработка Perl 5. 17 октября 1994 года выпущен Perl 5.000, который включал в себя полностью переписанный интерпретатор, появилось ООП, ссылки, локальные
my
переменные, также появились модули, предоставляющие механизм расширения языка без переписывания интерпретатора. - 26 октября 1995 начала работу CPAN (Comprehensive Perl Archive Network — «Всеобъемлющая сеть архивов Perl»).
- 15 мая 1997 года выпущен Perl 5.004, в котором введен пакет UNIVERSAL, дающий корневой класс, который наследуют все остальные.
- 22 июня 1998 года выпущен Perl 5.005 с улучшенным процессором регулярных выражений.
- 22 марта 2000 года выпущен Perl 5.6, в который включена поддержка 64-битных архитектур. Была изменена система ведения версий: за версией 5.005_63 последовала 5.5.640. Было принято соглашение применять к стабильным версиям интерпретатора четные номера версий.
- В 2000 году Ларри выступил с призывом активно обсуждать следующую версию языка — Perl 6.
- В 2001 году начата работа над окончательной спецификацией к Perl 6.
- 18 июля 2002 года выпущен Perl 5.8 и с этого момента интерпретатор начал получать ежегодные обновления. Версия 5.8 улучшила поддержку Unicode; увеличила числовую точность.
- В 2004 начата работа над Synopsis — ряд документов, ставший впоследствии спецификацией к Perl 6.
- В феврале 2005 года Отриус Тан начала работу над Pugs — первой реализацией Perl 6 на Haskell, но в 2006 году проект заглох.
- 18 декабря 2007 года, в день 20-летней годовщины Perl 1.0, была выпущена версия Perl 5.10.0. Эта версия включает нововведения из Perl 6: операторы
given..when
; обновление регулярных выражений; операция~~
. Примерно в это же время начата серьезная работа по реализации Perl 6 — Rakudo Perl. - 12 апреля 2010 года вышел Perl 5.12.0. Главным нововведение стала полная поддержка Unicode 5.2.
- 14 мая 2011 выпущен Perl 5.14. В языке появилась встроенная поддержка JSON.
Краткий обзор учебника
правитьПрограмма на языке Perl очень похожа на сценарий командной оболочки, т.е. в ней нет точки входа из функции main()
, как например в языке Си или Java. Код начинает интерпретироваться с первой строки по последнюю как он записан в файле.
Программа Perl может быть разнесена в несколько файлов, при этом точкой входа является один из них — запускающий файл. Другие файлы подключаются к запускающему файлу с помощью управляющих директив.
Perl заимствует ряд свойств из языков программирования командных оболочек Unix. Все переменные маркируются ведущими знаками (сигилами), которые точно выражают тип данных переменной в этом контексте. Важно, что эти знаки позволяют переменным быть интерполированным в строках. Perl обладает множеством встроенных функций, которые обеспечивают инструментарий, часто используемый для программирования оболочки, например сортировку или вызов системных служб. В главе «Типы данных» вводятся три основных типа данных: скаляр, массив и хеш.
Общая структура Perl в общих чертах ведёт своё начало от языка Си. Perl — процедурный по своей природе, имеет переменные, выражения присваивания, блоки кода, отделяемые фигурными скобками, управляющие структуры и функции. Perl является императивным языком, т.е. программа строится из последовательности операторов, определяющих действия. Простые операторы представляют выражения, которые состоят из одной и более операций. Главы «Операции и выражения» и «Операторы» знакомят читателя с правилами построения операторов и основами синтаксиса языка.
Программа на любом языке программирования служит, чтобы принять данные, обработать их и отдать некоторый результат. Глава «Ввод и вывод» рассказывает как реализуется простейший ввод данных и вывод их на устройство вывода. Вывод данных может быть сформирован в удобочитаемую для человека форму. Глава «Форматированный вывод» описывает инструменты Perl для форматированного вывода.
Для построения сложных структур в язык были введены ссылки, которые хранят адреса на ячейки в памяти, позволяющие произвольно осуществлять доступ к данным программы. В главе «Ссылки» рассказано, как работать с данными по ссылкам.
Сложные программы обычно разбиваются на процедуры, а повторяющиеся фрагменты оформляются функциями. Кроме того, сам проект, написанный на Perl, может быть разбит на множество файлов и оформлен библиотекой или модулем. Глава «Функции и процедуры» рассказывает о том, как объявляются пользовательские процедуры и функции. Глава «Пакеты, библиотеки и модули» рассказывает, как оформить код библиотекой или модулем.
Начиная с 5-й версии, в Perl поддерживается ООП парадигма программирования. Она реализована очень необычно, на основе существующих механизмов Perl. Глава «Объектно-ориентированное программирование в Perl» знакомит читателя, как объявляются классы и реализуется наследование в Perl, а также как строятся объекты и вызываются их методы.
В Perl заложен богатый инструментарий для работы со строками. В главе «Работа со строками и регулярные выражения» рассмотрены регулярные выражения Perl, через которые осуществляется поиск и замена фрагментов в тексте, а также рассмотрены функции, направленные на работу с текстом.
Запуск программ Perl
правитьДля запуска Perl программ вам понадобится интерпретатор perl
, который компилирует и запускает программу за один шаг. Запустить программу можно, передав интерпретатору исходный файл программы:
$ perl source_code.pl
# Передача аргументов командной оболочки
$ perl source_code.pl arg1 arg2 arg3
Используя ключ -e
, программу можно передать в момент вызова интерпретатора:
$ perl -e 'print "Hello World!\n";'
# Примечание: обычно так поступают, когда программа очень короткая, т.н.
# программа-однострочник.
При запуске программы, внутренний компилятор Perl сначала преобразует исходный код в байт-код, а далее ядро обработки байт-кода получает управление и запускает его на исполнение. При обнаружении синтаксической ошибки интерпретация завершается с кодом 2. В среднем компиляция даже очень большой программы происходит очень быстро и составляет малый процент от времени выполнения. Исключением могут быть только CGI-сценарии, которые могут вызываться сотни и тысячи раз в минуту. Байт-код Perl не сохраняется между вызовами, поэтому по-сути программа компилируется каждый раз заново.
В *nix системах из кода Perl можно делать интерпретируемые сценарии. Для этого нужно в первой строке исходного файла разместить шебанг (один из следующих), после которого должен идти код:
#!/usr/bin/env perl
#!/usr/bin/perl
Тогда исходный файл можно сделать исполняемым и запускать без явного вызова интерпретатора:
./source_code.pl
Интерпретатор Perl требуется компилировать под конкретную программную архитектуру, но к счастью каждый релиз поставляется уже собранным (в форме дистрибутивного пакета), для разных операционных систем. Скачать интерпретатор можно с официального сайта www.perl.org.
Ссылки
править
Типы данных → |