Перейти к содержанию

Некоторые сведения о Perl 5

Материал из Викиучебника — открытых книг для открытого мира
Некоторые сведения о Perl 5

Справочное пособие


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

В книге приведены базовые сведения по языку Perl и некоторые паттерны программирования в нем. Рассмотрены все базовые возможности языка и основные модули интерпретатора perl. Книгу следует читать по порядку, так как последующие главы требуют знания и понимания предыдущих. Местами материал может забегать вперед.

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

use strict;

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

Материал книги вращается вокруг 5 версии языка и не привязан к конкретной версии интерпретатора, тем не менее, если в тексте это будет важно для контекста, об этом будет сказано отдельно.

Почему Perl

[править]
Фрагмент функции на языке Perl. Для понимания контекста, функция подчищает HTML-код от ненужного содержимого по некоторым правилам

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

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

Perl это определенно не тот язык, который стоит изучать первым. Этот язык обладает следующими преимуществами:

  • встроенные и очень простые средства для работы со сложными структурами;
  • свободный синтаксис, благодаря чему одна и та же задача может решаться разными способами;
  • огромное число готовых библиотек, решающих самые разные задачи;
  • встроенная поддержка регулярных выражений — гордость Perl. Регулярные выражения в Perl работают в среднем очень быстро. Это отчасти связано с тем, что язык разрабатывался как анализатор больших текстовых массивов;
  • поддержка различных парадигм программирования: процедурная, объектно-ориентированная (ООП) и функциональная;
  • динамическая типизация;
  • автоматическое выделение и освобождение памяти (по методу подсчета ссылок);
  • кроссплатформенность;
  • свободное распространение интерпретатора и открытость его исходного кода.

Perl хорошо зарекомендовал себя в следующих областях:

  • системное администрирование: автоматизация процессов, сбор информации и формирование отчетов;
  • фильтры электронной почты;
  • когда-то на нем активно писали CGI-сценарии, но сейчас первенство в этом забрал больше PHP;
  • написание всевозможных web-серверов;
  • написание web-клиентов.

На Perl можно писать прототипы для больших программ, а также можно постигать основы системного программирования.

Краткая история языка

[править]
Ларри Уолл в 2015 году

Язык Perl был придуман в 1987 программистом компании Unisys Ларри Уолом (лингвистом по образованию). В какой-то момент Ларри понадобился простой инструмент для создания отчетов о содержании многочисленных текстовых файлов в среде Unix. На тот момент существовало два широко используемых инструмента для разбора текстовых файлов — Sed и AWK, — но к разочарованию Ларри он уперся в их ограничение на число одновременно открытых файловых дескрипторов. Отчасти это и побудило Ларри разработать новый язык для извлечения и составления отчетов — Perl (Practical Extraction аnd Report Language).

По мере роста потребностей Ларри, он добавлял в язык все больше и больше возможностей, и Perl уже перестал быть похожим на язык для сбора отчетов, а становился языком общего назначения. Со временем Ларри сделал язык и код интерпретатора открытым для всех желающих, после чего язык стремительно начал набирать популярность. Пика популярности он достиг в 2000–2006 годах. В эти годы и была написана внушительная часть модулей CPAN.

Маскотом языка Perl является верблюд. Выбор животного обусловлен первой книгой о Perl Programming Perl, на обложке которой был изображен верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу

На становление 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.

Ссылки

[править]



Типы данных →