stringtranslate.com

Перл

Perl — это высокоуровневый , универсальный , интерпретируемый , динамический язык программирования . Хотя Perl официально не является аббревиатурой, [9] существуют различные бэкронимы , в том числе «Practical Extraction and Reporting Language». [10]

Perl был разработан Ларри Уоллом в 1987 году [11] как универсальный язык сценариев Unix для упрощения обработки отчетов. [12] [11] [13] С тех пор он претерпел множество изменений и доработок. Первоначально Perl не писался с заглавной буквы, и к моменту выпуска Perl 4 название было изменено на заглавное. [13] Последним выпуском является Perl 5, впервые выпущенный в 1994 году. С 2000 года по октябрь 2019 года разрабатывалась шестая версия Perl; название шестой версии было изменено на Raku . [14] [15] Оба языка продолжают разрабатываться независимо друг от друга разными командами разработчиков, которые щедро заимствуют идеи друг у друга.

Perl заимствует возможности из других языков программирования, включая C , sh , AWK и sed . [1] Он предоставляет возможности обработки текста без произвольных ограничений длины данных, присущих многим современным инструментам командной строки Unix . [16] Perl — очень выразительный язык программирования: исходный код для заданного алгоритма может быть коротким и хорошо сжимаемым. [17] [18]

Perl приобрел широкую популярность в середине 1990-х годов как язык сценариев CGI , отчасти благодаря своим мощным регулярным выражениям и возможностям разбора строк . [19] [20] [21] [22] Помимо CGI, Perl 5 используется для системного администрирования , сетевого программирования , финансов, биоинформатики и других приложений, таких как графические пользовательские интерфейсы (GUI). Его прозвали «швейцарской армейской бензопилой языков сценариев» из-за его гибкости и мощности. [23] В 1998 году его также называли « липкой лентой , которая держит Интернет вместе», ссылаясь как на его повсеместное использование в качестве связующего языка , так и на его предполагаемую неэлегантность. [24]

Название и логотипы

Perl изначально назывался «Pearl». Уолл хотел дать языку короткое имя с положительным подтекстом. Это также христианская отсылка к Притче о Жемчужине из Евангелия от Матфея. [11] [25] Однако Уолл обнаружил существующий язык PEARL до официального выпуска Perl и исключил «a» из названия. [26] [11]

Название иногда расширяется как бэкроним : Practical Extraction and Report Language [27] и собственный Pathologically Eclectic Rubbish Lister Уолла , который находится на странице руководства для Perl. [28]

Programming Perl , издаваемый O'Reilly Media , имеет изображение одногорбого верблюда на обложке и обычно называется «Camel Book». [29] Это изображение стало неофициальным символом Perl. O'Reilly владеет изображением как торговой маркой , но лицензирует его для некоммерческого использования, требуя только подтверждения и ссылки на www.perl.com. Лицензирование для коммерческого использования решается в каждом конкретном случае. [30] O'Reilly также предоставляет логотипы «Programming Republic of Perl» для некоммерческих сайтов и кнопки «Powered by Perl» для любого сайта, использующего Perl. [30]

Perl Foundation владеет альтернативным символом — луковицей, лицензию на который она предоставляет своим дочерним компаниям Perl Mongers , PerlMonks , Perl.org и другим. [31] Символ представляет собой визуальную игру слов на тему «жемчужина луковица» . [32]

История

Ранние версии

Ларри Уолл начал работу над Perl в 1987 году, работая программистом в Unisys ; [16] он выпустил версию 1.0 18 декабря 1987 года. [1] [11] Уолл основал ранний Perl на некоторых методах существующих языков, используемых для обработки текста. [11]

Perl 2, выпущенный в июне 1988 года, [33] [34] имел улучшенный механизм регулярных выражений. Perl 3, выпущенный в октябре 1989 года, [33] добавил поддержку двоичных потоков данных . [35]

1990-е

Первоначально единственной документацией по Perl была одна длинная man-страница . В 1991 году была опубликована книга Programming Perl , известная многим программистам Perl как «Camel Book» из-за своей обложки, которая стала фактическим справочником по языку. [36] В то же время номер версии Perl был увеличен до 4, не для того, чтобы отметить существенное изменение в языке, а для того, чтобы обозначить версию, которая была хорошо документирована в книге. [37] Perl 4 был выпущен в марте 1991 года. [33]

Perl 4 прошел через ряд релизов поддержки , достигших кульминации в Perl 4.036 в 1993 году, после чего Уолл отказался от Perl 4, чтобы начать работу над Perl 5. Первоначальный дизайн Perl 5 продолжался в 1994 году. Список рассылки perl5-porters был создан в мае 1994 года для координации работы по переносу Perl 5 на различные платформы. Он остается основным форумом для разработки, обслуживания и переноса Perl 5. [38]

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

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

Одно из важнейших событий в истории Perl 5 произошло за пределами самого языка и стало следствием поддержки его модулей. 26 октября 1995 года была создана Comprehensive Perl Archive Network (CPAN) в качестве репозитория языка Perl и модулей Perl ; по состоянию на декабрь 2022 года она содержит более 211 850 модулей в 43 865 дистрибутивах, написанных более чем 14 324 авторами, и зеркалируется по всему миру в более чем 245 местах. [41]

Perl 5.004 был выпущен 15 мая 1997 года и включал, среди прочего, пакет UNIVERSAL, дающий Perl базовый объект, из которого автоматически выводятся все классы , и возможность запрашивать версии модулей. Другим значительным достижением стало включение модуля CGI.pm , [42] что способствовало популярности Perl как языка сценариев CGI . [43]

В Perl 5.004 добавлена ​​поддержка Microsoft Windows , Plan 9 , QNX и AmigaOS . [42]

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

2000–2020

Perl 5.6 был выпущен 22 марта 2000 года. Основные изменения включали поддержку 64-битной архитектуры , представление строк Unicode , поддержку файлов размером более 2 ГиБ и ключевое слово «our». [46] [47] При разработке Perl 5.6 было принято решение переключить схему версионирования на более похожую на другие проекты с открытым исходным кодом; после 5.005_63 следующая версия стала 5.5.640, с планами, чтобы версии для разработки имели нечетные номера, а стабильные версии — четные номера. [48]

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

Perl 5.8 был впервые выпущен 18 июля 2002 года, и последующие версии 5.X выпускались примерно ежегодно с тех пор. Perl 5.8 улучшил поддержку Unicode, добавил новую реализацию ввода-вывода, добавил новую реализацию потоков, улучшил числовую точность и добавил несколько новых модулей. [50] По состоянию на 2013 год эта версия по-прежнему оставалась самой популярной версией Perl и использовалась в Red Hat Linux 5, SUSE Linux 10, Solaris 10, HP-UX 11.31 и AIX 5.

В 2004 году началась работа над «Синопсисами» — документами, которые изначально суммировали Апокалипсис, но которые стали спецификацией языка Perl 6. В феврале 2005 года Одри Тан начала работу над Pugs , интерпретатором Perl 6, написанным на Haskell . [51] Это была первая согласованная попытка сделать Perl 6 реальностью. Эта попытка застопорилась в 2006 году. [52]

Проект Perl On New Internal Engine (PONIE) существовал с 2003 по 2006 год. Он должен был стать мостом между Perl 5 и 6 и попыткой переписать интерпретатор Perl 5 для работы на виртуальной машине Perl 6 Parrot . Целью было обеспечить будущее миллионов строк кода Perl 5 в тысячах компаний по всему миру. [53] Проект PONIE завершился в 2006 году и больше активно не разрабатывается. Некоторые улучшения, внесенные в интерпретатор Perl 5 как часть PONIE, были включены в этот проект. [54]

18 декабря 2007 года, в 20-ю годовщину Perl 1.0, был выпущен Perl 5.10.0. Perl 5.10.0 включал в себя заметные новые функции, которые приблизили его к Perl 6. К ним относятся оператор switch (называемый «given»/«when»), обновления регулярных выражений и оператор интеллектуального сопоставления (~~). [55] [56] Примерно в это же время началась серьезная разработка другой реализации Perl 6, известной как Rakudo Perl, разработанной совместно с виртуальной машиной Parrot . По состоянию на ноябрь 2009 года Rakudo Perl регулярно выпускался ежемесячно и в настоящее время является наиболее полной реализацией Perl 6.

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

12 апреля 2010 года был выпущен Perl 5.12.0. Среди заметных основных улучшений можно отметить новый package NAME VERSIONсинтаксис, оператор yada yada (предназначенный для обозначения кода-заполнителя, который еще не реализован), неявные ограничения, полное соответствие Y2038 , перегрузку преобразования регулярных выражений, поддержку DTrace и Unicode 5.2. [57]

14 мая 2011 года был выпущен Perl 5.14 со встроенной поддержкой JSON . [58]

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

18 мая 2013 года был выпущен Perl 5.18. Среди заметных новых функций — новые хуки dtrace, лексические подпрограммы, больше подпрограмм CORE::, переработка хэша в целях безопасности, поддержка Unicode 6.2. [60]

27 мая 2014 года был выпущен Perl 5.20. Среди новых заметных функций можно отметить сигнатуры подпрограмм, хэш-срезы/новый синтаксис среза, постфиксное разыменование (экспериментальное), Unicode 6.3 и функцию rand(), использующую согласованный генератор случайных чисел. [61]

Некоторые наблюдатели связывают выпуск Perl 5.10 с началом движения Modern Perl. [62] В частности, эта фраза описывает стиль разработки, который охватывает использование CPAN, использует преимущества последних разработок в языке и строго относится к созданию высококачественного кода. [63] Хотя книга Modern Perl [64] может быть наиболее заметным знаменосцем этой идеи, другие группы, такие как Enlightened Perl Organization [65], подхватили это дело.

В конце 2012 и 2013 годов стартовало несколько проектов альтернативных реализаций Perl 5: Perl5 в Perl6 от команды Rakudo Perl [66] , moe от Стевана Литтла и его друзей [67] p2 [68] от команды Perl11 под руководством Рейни Урбана, gperl от goccy [69] и rperl, проект Kickstarter под руководством Уилла Брасвелла, связанный с проектом Perl11. [70]

Perl 6 и Раку

Камелия , логотип проекта Perl 6 [71]

На конференции Perl 2000 года Джон Орвант выступил с предложением о создании новой крупной языковой инициативы. [72] Это привело к решению начать работу над перепроектированием языка, который должен был называться Perl 6. Предложения по новым языковым возможностям были запрошены у сообщества Perl в целом, которое представило более 300 RFC . [73]

Уолл провел следующие несколько лет, переваривая RFC и синтезируя их в связную структуру для Perl 6. Он представил свой проект для Perl 6 в серии документов, называемых «апокалипсисами» — пронумерованных так, чтобы соответствовать главам в Programming Perl . По состоянию на январь 2011 года , разрабатываемая спецификация Perl 6 была инкапсулирована в проектных документах, называемых Synopses — пронумерованных так, чтобы соответствовать Apocalypses. [74]

Диссертация Брэдли М. Куна , над которой работал Уол, рассматривала возможное использование виртуальной машины Java в качестве среды выполнения для Perl. [75] Диссертация Куна показала , что такой подход проблематичен. В 2001 году было решено, что Perl 6 будет работать на кросс-языковой виртуальной машине Parrot .

В 2005 году Одри Тан создала проект Pugs , реализацию Perl 6 на Haskell . Он действовал и продолжает действовать как тестовая платформа для языка Perl 6 (отдельно от разработки фактической реализации), позволяя разработчикам языка исследовать. Проект Pugs породил активное кросс-языковое сообщество Perl/Haskell, сосредоточенное вокруг канала IRC Libera Chat #raku. Многие влияния функционального программирования были усвоены командой разработчиков Perl 6. [76]

В 2012 году разработка Perl 6 была сосредоточена в основном на двух компиляторах: [77]

  1. Rakudo , реализация, работающая на виртуальной машине Parrot и виртуальной машине Java. [78]
  2. Niecza , ориентированная на среду Common Language Runtime .

В 2013 году была анонсирована MoarVM («Metamodel On A Runtime») — виртуальная машина на основе языка C, разработанная в первую очередь для Rakudo. [79]

В октябре 2019 года Perl 6 был переименован в Raku. [80]

По состоянию на 2017 год в стадии активной разработки находятся только реализация Rakudo и MoarVM, а также поддерживаются другие виртуальные машины, такие как Java Virtual Machine и JavaScript . [81]

Перл 7

В июне 2020 года Perl 7 был объявлен преемником Perl 5. [82] Первоначально Perl 7 должен был быть основан на Perl 5.32, а его выпуск ожидался в первой половине 2021 года, а релиз-кандидаты — раньше. [83]

Этот план был пересмотрен в мае 2021 года, без указания сроков выпуска или версии Perl 5 для использования в качестве базовой версии. [84] Когда Perl 7 будет выпущен, Perl 5 перейдет в долгосрочное обслуживание. Однако поддерживаемые версии Perl 5 продолжат получать важные исправления безопасности и ошибок. [85]

Perl 7 был анонсирован 24 июня 2020 года на «The Perl Conference in the Cloud» как преемник Perl 5. [83] [82] Основанный на Perl 5.32, Perl 7 планировался как обратно совместимый с современным кодом Perl 5; код Perl 5 без заголовка -шаблона (pragma) требует добавления use compat::perl5;для сохранения совместимости, но современный код может отказаться от части шаблона.

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

Дизайн

Философия

По словам Уолла, у Perl есть два слогана. Первый — «Есть более одного способа сделать это», обычно известный как TMTOWTDI (произносится как Тим Тоуди ). Как утверждают сторонники этого девиза, эта философия облегчает написание кратких утверждений. [87] [88] [89]

Второй лозунг: «Легкие вещи должны быть легкими, а сложные вещи должны быть возможными». [16]

Проект Perl можно рассматривать как ответ на три основные тенденции в компьютерной индустрии: снижение стоимости оборудования, рост стоимости рабочей силы и усовершенствование технологии компиляторов . Многие ранние компьютерные языки, такие как Fortran и C, были направлены на эффективное использование дорогостоящего компьютерного оборудования. Напротив, Perl был разработан так, чтобы программисты могли писать программы быстрее и проще. [90]

Perl имеет много функций, которые облегчают задачу программиста за счет более высоких требований к процессору и памяти. К ним относятся автоматическое управление памятью; динамическая типизация ; строки, списки и хэши; регулярные выражения; интроспекция ; и eval()функция. Perl следует теории «отсутствия встроенных ограничений», [29] идея, похожая на правило « ноль-один-бесконечность» .

Уолл был обучен как лингвист, и дизайн Perl во многом основан на лингвистических принципах. Примерами служат кодирование Хаффмана (общие конструкции должны быть короткими), хорошее взвешивание концов (важная информация должна быть первой) и большой набор языковых примитивов . Perl отдает предпочтение языковым конструкциям, которые являются краткими и естественными для написания людьми, даже там, где они усложняют интерпретатор Perl. [91]

Синтаксис Perl отражает идею о том, что «различные вещи должны выглядеть по-разному». [92] Например, скаляры, массивы и хэши имеют разные начальные сигилы. Индексы массивов и ключи хэшей используют разные виды фигурных скобок. Строки и регулярные выражения имеют разные стандартные разделители.

Существует широкий практический уклон как в языке Perl, так и в сообществе и культуре, которые его окружают. Предисловие к Programming Perl начинается так: «Perl — это язык для выполнения вашей работы». [16] Одним из последствий этого является то, что Perl — неаккуратный язык. Он включает в себя множество функций, допускает исключения из своих правил и использует эвристику для разрешения синтаксических неоднозначностей. Из-за снисходительной природы компилятора ошибки иногда бывает трудно найти. Документация функций Perl отмечает вариативное поведение встроенных функций в списочном и скалярном контекстах, говоря: «В общем, они делают то, что вы хотите, если только вам не нужна согласованность». [93]

Функции

Общая структура Perl в целом происходит от языка C. Perl по своей природе является процедурным языком с переменными , выражениями , операторами присваивания , блоками , разделенными фигурными скобками , управляющими структурами и подпрограммами . [94]

Perl также берет черты из программирования оболочки. Все переменные помечены ведущими сигилами , которые позволяют интерполировать переменные непосредственно в строки . Однако, в отличие от оболочки, Perl использует сигилы при всех обращениях к переменным, и в отличие от большинства других языков программирования, которые используют сигилы, сигил обозначает не тип переменной, а тип выражения. Так, например, в то время как массив обозначается сигилом "@" (например @arrayname), отдельный член массива обозначается скалярным сигилом "$" (например $arrayname[3]). Perl также имеет много встроенных функций, которые предоставляют инструменты, часто используемые в программировании оболочки (хотя многие из этих инструментов реализованы программами, внешними по отношению к оболочке), такие как сортировка и вызов средств операционной системы . [ необходима цитата ]

Perl берет хэши («ассоциативные массивы») из AWK и регулярные выражения из sed . Они упрощают множество задач по синтаксическому анализу, обработке текста и управлению данными. Совместно с Lisp используется неявный возврат последнего значения в блоке, и все операторы также являются выражениями, которые могут использоваться в более крупных выражениях. [ необходима цитата ]

Perl 5 добавил функции, которые поддерживают сложные структуры данных , функции первого класса (то есть замыкания как значения) и объектно-ориентированную модель программирования. К ним относятся ссылки , пакеты, диспетчеризация методов на основе классов и лексически ограниченные переменные , а также директивы компилятора (например, strict pragma ). Важной дополнительной функцией, представленной в Perl 5, была возможность упаковывать код в виде повторно используемых модулей. Позже Уолл заявил, что «целью системы модулей Perl 5 было поощрение роста культуры Perl, а не ядра Perl». [95]

Все версии Perl выполняют автоматическую типизацию данных и автоматическое управление памятью . Интерпретатор знает тип и требования к хранению каждого объекта данных в программе; он выделяет и освобождает память для них по мере необходимости, используя подсчет ссылок (поэтому он не может освободить циклические структуры данных без ручного вмешательства). Допустимые преобразования типов — например, преобразования из числа в строку — выполняются автоматически во время выполнения ; недопустимые преобразования типов являются фатальными ошибками. [ необходима цитата ]

Синтаксис

Perl критики называли «шурой строк» ​​и «языком только для записи». Рэндал Л. Шварц в первом издании книги Learning Perl [ 96] в первой главе утверждает: «Да, иногда Perl выглядит как шум строк для непосвященных, но для опытного программиста Perl он выглядит как шум строк с контрольной суммой , имеющий миссию в жизни». [97] Он также заявил, что обвинение в том, что Perl является языком только для записи, можно было бы избежать, если бы кодировал с «надлежащей осторожностью». [97] В обзорном документе Perl perlintro говорится, что имена встроенных «магических» скалярных переменных «выглядят как знаки препинания или шум строк». [98] Однако модуль English предоставляет как длинные, так и короткие английские альтернативы. В документе perlstyle говорится, что шум строк в регулярных выражениях можно смягчить, используя /xмодификатор для добавления пробелов. [99]

Согласно Perl 6 FAQ , Perl 6 был разработан для смягчения «обычных подозреваемых», которые вызывают претензии критиков Perl 5 о «шуме в строках», включая удаление «большинства переменных пунктуации» и очистку синтаксиса регулярных выражений. [100] Perl 6 FAQ также утверждает, что то, что иногда называют шумом в строках Perl, является «фактическим синтаксисом языка», так же как герундий и предлоги являются частью английского языка . [100] В сообщении в блоге от декабря 2012 года, несмотря на утверждение, что «Rakudo Perl 6 потерпел неудачу и продолжит терпеть неудачу, если не получит некоторого взрослого надзора», chromatic заявил, что дизайн Perl 6 имеет «четко определенную грамматику», «улучшенную систему типов, унифицированную объектную систему с интеллектуальной метамоделью, метаоператорами и более ясную систему контекста, которая обеспечивает такие тонкости, как всепроникающая лень». [101] Он также заявил, что «Perl 6 обладает связностью и последовательностью, которых не хватает Perl 5». [101]

На Perl программу «Hello, World!» можно записать так:

распечатать "Привет, мир!\n" ; 

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

#!/usr/bin/perl использовать строгий режим ; использовать предупреждения ;  мой ( $осталось , $всего );    $остаток = $всего = сдвиг ( @ARGV );STDOUT -> автоочистка ( 1 );while ( $remaining ) { printf ( "Осталось %s/%s \r" , $remaining -- , $total ); sleep 1 ; }            распечатать "\n" ; 

Интерпретатор Perl также может использоваться для одноразовых скриптов в командной строке. Следующий пример (вызванный из sh-совместимой оболочки, такой как Bash ) преобразует строку "Bob" во всех файлах, заканчивающихся на .txt в текущем каталоге, в "Robert":

$ perl  -i.bak  -lp  -e 's/Боб/Роберт/г' *.txt  

Выполнение

Не существует письменной спецификации или стандарта для языка Perl для версий Perl до Perl 5, и нет планов по созданию таковой для текущей версии Perl. Была только одна реализация интерпретатора, и язык развивался вместе с ней. Этот интерпретатор вместе с его функциональными тестами является фактической спецификацией языка. Perl 6, однако, начинался со спецификации, [102] и несколько проектов [103] нацелены на реализацию части или всей спецификации. [ необходима цитата ]

Perl реализован как основной интерпретатор, написанный на C, вместе с большим набором модулей, написанных на Perl и C. По состоянию на 2010 год интерпретатор состоит из 150 000 строк кода C и компилируется в исполняемый файл размером 1 МБ на типичных архитектурах машин. В качестве альтернативы интерпретатор может быть скомпилирован в библиотеку ссылок и встроен в другие программы. В дистрибутиве около 500 модулей, включающих 200 000 строк Perl и дополнительные 350 000 строк кода C (большая часть кода C в модулях состоит из таблиц кодировки символов ). [ необходима цитата ]

Интерпретатор имеет объектно-ориентированную архитектуру. Все элементы языка Perl — скаляры, массивы, хэши, coderefs, дескрипторы файлов — представлены в интерпретаторе структурами C. Операции над этими структурами определяются большим набором макросов , typedef и функций; они составляют Perl C API . API Perl может сбивать с толку непосвященных, но его точки входа следуют последовательной схеме именования , которая дает руководство тем, кто его использует. [ необходима цитата ]

Жизнь интерпретатора Perl в целом делится на фазу компиляции и фазу выполнения. [104] В Perl фазы являются основными этапами жизненного цикла интерпретатора. Каждый интерпретатор проходит каждую фазу только один раз, и фазы следуют в фиксированной последовательности. [ необходима цитата ]

Большая часть того, что происходит в фазе компиляции Perl, — это компиляция, а большая часть того, что происходит в фазе выполнения Perl, — это выполнение, но есть и существенные исключения. Perl в значительной степени использует свою возможность выполнять код Perl во время фазы компиляции. Perl также откладывает компиляцию до фазы выполнения. Термины, которые указывают на тип обработки, которая фактически происходит в любой момент, — это время компиляции и время выполнения . Perl находится во время компиляции в большинстве точек во время фазы компиляции, но время компиляции может также быть введено во время фазы выполнения. Время компиляции для кода в строковом аргументе, переданном встроенной функции, evalпроисходит во время фазы выполнения. Perl часто находится во время выполнения во время фазы компиляции и проводит большую часть фазы выполнения во время выполнения. Код в BEGINблоках выполняется во время выполнения, но в фазе компиляции.

Во время компиляции интерпретатор разбирает код Perl в синтаксическое дерево . Во время выполнения он выполняет программу, проходя по дереву . Текст разбирается только один раз, а синтаксическое дерево подвергается оптимизации перед выполнением, поэтому выполнение относительно эффективно. Оптимизации во время компиляции на синтаксическом дереве включают сворачивание констант и распространение контекста, но также выполняется оптимизация peephole . [105]

Perl имеет полную по Тьюрингу грамматику , поскольку на синтаксический анализ может влиять код времени выполнения, выполняемый во время фазы компиляции. [106] Поэтому Perl не может быть проанализирован прямой комбинацией лексера / анализатора Lex / Yacc . Вместо этого интерпретатор реализует свой собственный лексер, который координируется с модифицированным синтаксическим анализатором GNU bison для разрешения неоднозначностей в языке. [ необходима цитата ]

Часто говорят, что «Только perl может разобрать Perl», [107] имея в виду, что только интерпретатор Perl ( perl) может разобрать язык Perl ( Perl ), но даже это не совсем так. Поскольку интерпретатор Perl может имитировать машину Тьюринга во время фазы компиляции, ему необходимо решить проблему остановки , чтобы завершить разбор в каждом случае. Это давний результат, что проблема остановки неразрешима, и поэтому даже Perl не всегда может разобрать Perl. Perl делает необычный выбор, предоставляя пользователю доступ ко всей своей программной мощности на своей собственной фазе компиляции. Стоимость с точки зрения теоретической чистоты высока, но практические неудобства, по-видимому, редки. [108]

Другие программы, которые берутся за разбор Perl, такие как анализаторы исходного кода и автоиндентеры , должны бороться не только с неоднозначными синтаксическими конструкциями , но и с неразрешимостью разбора Perl в общем случае. Проект PPI ​​Адама Кеннеди был сосредоточен на разборе кода Perl как документа (сохраняя его целостность как документа), вместо разбора Perl как исполняемого кода (что даже сам Perl не всегда может сделать). Именно Кеннеди первым предположил, что «разбор Perl страдает от „проблемы остановки“» [109] , что было позже доказано. [110]

Perl распространяется с более чем 250 000 функциональных тестов для основного языка Perl и более чем 250 000 функциональных тестов для основных модулей. Они запускаются как часть обычного процесса сборки и широко проверяют интерпретатор и его основные модули. Разработчики Perl полагаются на функциональные тесты, чтобы гарантировать, что изменения в интерпретаторе не привносят программные ошибки ; кроме того, пользователи Perl, которые видят, что интерпретатор проходит свои функциональные тесты на их системе, могут иметь высокую степень уверенности в том, что он работает правильно. [ необходима цитата ]

Порты

Perl имеет двойную лицензию : Artistic License 1.0 [5] [6] и GNU General Public License . [7] Дистрибутивы доступны для большинства операционных систем . Он особенно распространен в Unix и Unix-подобных системах, но был портирован на большинство современных (и многие устаревшие) платформ. Только с шестью [ требуется ссылка ] зарегистрированными исключениями Perl может быть скомпилирован из исходного кода на всех POSIX -совместимых или иным образом Unix-совместимых платформах. [111]

Из-за необычных изменений, необходимых для классической среды Mac OS , был отдельно выпущен специальный порт под названием MacPerl. [112]

Comprehensive Perl Archive Network содержит полный список поддерживаемых платформ со ссылками на дистрибутивы, доступные на каждой из них. [113] CPAN также является источником общедоступных модулей Perl, которые не являются частью основного дистрибутива Perl. [ необходима ссылка ]

ActivePerl — это закрытый дистрибутив от ActiveState , который регулярно выпускает релизы, отслеживающие основные релизы Perl. [114] Ранее дистрибутив включал менеджер пакетов Perl (PPM), [115] популярный инструмент для установки, удаления, обновления и управления использованием общих модулей Perl; однако этот инструмент был прекращен с версии ActivePerl 5.28. [116] Также включен PerlScript , движок Windows Script Host (WSH), реализующий язык Perl. Visual Perl — это инструмент ActiveState, который добавляет Perl в набор разработки Visual Studio .NET . Конвертер VBScript в Perl, компилятор Perl для Windows и конвертеры AWK и sed в Perl также были выпущены этой компанией и включены в ActiveState CD для Windows , который включает все их дистрибутивы плюс Komodo IDE и все, кроме первого, на его варианте Unix–Linux–POSIX в 2002 году и позже. [117]

Производительность

Игра Computer Language Benchmarks Game сравнивает производительность реализаций типичных задач программирования на нескольких языках программирования. [118] Представленные реализации Perl обычно работают в верхней части спектра использования памяти и дают различные результаты скорости. Производительность Perl в игре benchmarks типична для интерпретируемых языков. [119]

Большие программы Perl запускаются медленнее, чем аналогичные программы на компилируемых языках, потому что Perl должен компилировать исходный код каждый раз, когда он запускается. В докладе на конференции YAPC::Europe 2005 и последующей статье "A Timely Start" Жан-Луи Леруа обнаружил, что его программы Perl запускаются гораздо дольше, чем ожидалось, потому что интерпретатор Perl тратит значительное время на поиск модулей в его слишком большом пути включения. [120] В отличие от Java, Python и Ruby, Perl имеет только экспериментальную поддержку предварительной компиляции. [121] Поэтому программы Perl платят эти накладные расходы при каждом выполнении. Фаза выполнения типичных программ достаточно длинна, поэтому амортизированное время запуска не является существенным, но тесты, которые измеряют очень короткое время выполнения, вероятно, будут искажены из-за этих накладных расходов. [122]

Для улучшения этой ситуации был представлен ряд инструментов. Первым таким инструментом был mod_perl от Apache , который стремился решить одну из наиболее распространенных причин быстрого вызова небольших программ Perl: веб- разработка CGI . ActivePerl через Microsoft ISAPI обеспечивает схожие улучшения производительности. [123]

После компиляции кода Perl возникают дополнительные накладные расходы на этапе выполнения, которые обычно отсутствуют в программах, написанных на компилируемых языках, таких как C или C++. Примерами таких накладных расходов являются интерпретация байт-кода , управление памятью с подсчетом ссылок и динамическая проверка типов. [124]

Наиболее важные процедуры могут быть написаны на других языках (например, C ), которые могут быть подключены к Perl с помощью простых встроенных модулей или более сложного, но гибкого механизма XS . [125]

Приложения

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

Perl в основном использовался для написания CGI- скриптов: крупные проекты, написанные на Perl, включают cPanel , Slash , Bugzilla , RT , TWiki и Movable Type ; веб-сайты с высоким трафиком, которые широко используют Perl, включают Priceline.com , Craigslist , [126] IMDb , [127] LiveJournal , DuckDuckGo , [128] [129] Slashdot и Ticketmaster . Он также является дополнительным компонентом популярного технологического стека LAMP для веб-разработки , вместо PHP или Python . Perl широко используется как язык системного программирования в дистрибутиве Debian Linux . [130]

Perl часто используется как связующий язык , связывающий вместе системы и интерфейсы, которые не были специально разработаны для взаимодействия, и для « изменения данных », [131] то есть преобразования или обработки больших объемов данных для таких задач, как создание отчетов. Эти сильные стороны тесно связаны. Сочетание делает Perl популярным универсальным языком для системных администраторов , особенно потому, что короткие программы, часто называемые « однострочными программами », можно вводить и запускать в одной командной строке . [ требуется цитата ]

Код Perl можно сделать переносимым между Windows и Unix; такой код часто используется поставщиками программного обеспечения (как коммерческого, готового к использованию (COTS), так и заказного) для упрощения упаковки и обслуживания сценариев сборки и развертывания программного обеспечения. [ необходима ссылка ]

Perl/Tk и wxPerl обычно используются для добавления графических пользовательских интерфейсов в скрипты Perl.

Возможности обработки текста Perl могут быть использованы для генерации SQL- запросов; массивы, хэши и автоматическое управление памятью упрощают сбор и обработку возвращаемых данных. Например, в интерфейсе прикладного программирования Perl DBI (API) Тима Банса аргументами API могут быть тексты SQL-запросов; таким образом, можно программировать на нескольких языках одновременно (например, для генерации веб-страницы с использованием HTML , JavaScript и SQL в документе here ). Использование интерполяции переменных Perl для программной настройки каждого из SQL-запросов и спецификация массивов или хэшей Perl в качестве структур для программного хранения результирующих наборов данных из каждого SQL-запроса позволяет использовать высокоуровневый механизм для обработки больших объемов данных для последующей обработки подпрограммой Perl. [132] В ранних версиях Perl интерфейсы баз данных создавались путем повторной компоновки интерпретатора с клиентской библиотекой баз данных. Это было настолько сложно, что было сделано только для нескольких наиболее важных и широко используемых баз данных, и это ограничивало результирующий исполняемый файл использованием только одного интерфейса базы данных за раз. [133]perl

В Perl 5 интерфейсы баз данных реализованы модулями Perl DBI. Модуль DBI (Database Interface) представляет собой единый, независимый от базы данных интерфейс для приложений Perl, в то время как модули DBD (Database Driver) обрабатывают детали доступа к примерно 50 различным базам данных; существуют драйверы DBD для большинства баз данных ANSI SQL . [134]

DBI обеспечивает кэширование для дескрипторов и запросов базы данных, что может значительно повысить производительность в долгоживущих средах выполнения, таких как mod_perl , [135] помогая системам с большим объемом данных предотвращать пики нагрузки, как в эффекте Slashdot . [136]

В современных приложениях Perl, особенно написанных с использованием веб-фреймворков , таких как Catalyst , модуль DBI часто используется косвенно через объектно-реляционные преобразователи, такие как DBIx::Class , Class::DBI [137] или Rose::DB::Object [138], которые генерируют SQL-запросы и обрабатывают данные прозрачно для автора приложения. [139]

Сообщество

Культура и сообщество Perl развивались вместе с самим языком. Usenet был первым публичным местом, где был представлен Perl, но в ходе своей эволюции сообщество Perl формировалось под влиянием роста и расширения интернет-сервисов, включая появление Всемирной паутины. Сообщество, окружающее Perl, было, по сути, темой первой речи Уолла «State of the Onion». [140]

State of the Onion — название ежегодных основных докладов Уолла о прогрессе Perl и его сообщества. Они характеризуются его фирменным юмором, использованием ссылок на культуру Perl, более широкую культуру хакеров, языковое прошлое Уолла, иногда его семейную жизнь, а иногда даже его христианское прошлое. [141] Каждый доклад сначала читается на различных конференциях Perl и в конечном итоге также публикуется в сети.

В сообщениях электронной почты, Usenet и на досках объявлений программы «Just another Perl hacker» (JAPH) являются общей тенденцией, созданной Рэндалом Л. Шварцем , одним из первых профессиональных тренеров Perl. [142] На жаргоне культуры Perl программисты Perl известны как Perl-хакеры, и отсюда происходит практика написания коротких программ для вывода фразы «Just another Perl hacker». В духе оригинальной концепции эти программы умеренно запутаны и достаточно коротки, чтобы вписаться в подпись электронного письма или сообщения Usenet. «Канонический» JAPH, разработанный Шварцем, включает запятую в конце, хотя она часто опускается. [143]

Perl «гольф» — это развлечение, заключающееся в сокращении количества символов (ключевых «ударов»), используемых в программе Perl, до абсолютного минимума, во многом так же, как игроки в гольф стремятся сделать как можно меньше ударов за раунд. Первое использование фразы [144] подчеркнуло разницу между прозаическим кодом, предназначенным для обучения новичков, и краткими хаками, которые, вероятно, развлекут опытных программистов Perl, примером последних являются JAPH, которые уже использовались в подписях в сообщениях Usenet и в других местах. Подобные трюки были безымянным развлечением в языке APL в предыдущие десятилетия. Использование Perl для написания программы, которая выполняла шифрование RSA, вызвало широкий и практический интерес к этому развлечению. [145] В последующие годы термин « кодовый гольф » был применен к развлечению на других языках. [146] Апокалипсис гольфа Perl состоялся на конференции Perl Conference 4.0 в Монтерее, Калифорния, в июле 2000 года.

Как и в случае с C, соревнования по запутанному коду были популярным времяпрепровождением в конце 1990-х годов. The Obfuscated Perl Contest был конкурсом, который проводился The Perl Journal с 1996 по 2000 год, и который сделал синтаксическую гибкость Perl главным достоинством. Награды присуждались в таких категориях, как «самая мощная» — программы, эффективно использующие пространство, — и «лучшая четырехстрочная подпись» для программ, которые умещались в четыре строки по 76 символов в стиле блока подписи Usenet . [147]

Поэзия Perl — это практика написания стихов, которые могут быть скомпилированы как легальный код Perl, например, произведение, известное как « Black Perl ». Поэзия Perl стала возможной благодаря большому количеству английских слов, которые используются в языке Perl. Новые стихотворения регулярно отправляются в сообщество PerlMonks . [148]

Смотрите также

Ссылки

  1. ^ abc Эштон, Элейн (1999). "Хронология Perl и его культуры (v3.0_0505)". Архивировано из оригинала 11 января 2013 г. Получено 12 марта 2004 г.
  2. ^ "Perl v5.40.0 теперь доступен". www.nntp.perl.org . Получено 11 июня 2024 г. .
  3. ^ "Perl 5.34.3, Perl 5.36.3 и Perl 5.38.2 теперь доступны". www.nntp.perl.org . Получено 5 декабря 2023 г. .
  4. ^ "Объявление о выпуске perl v5.41.3". www.nntp.perl.org . Получено 29 августа 2024 г. .
  5. ^ ab "The "Artistic License" - dev.perl.org". dev.perl.org . Архивировано из оригинала 24 июля 2018 г. . Получено 24 июня 2016 г. .
  6. ^ ab Artistic Архивировано 25 июля 2018 г. на Wayback Machine — файл в репозитории Perl 5 git
  7. ^ ab "Perl Licensing". dev.perl.org. Архивировано из оригинала 22 января 2011 г. Получено 8 января 2011 г.
  8. ^ Уолл, Ларри (12 декабря 2007 г.). «Программирование — это сложно, давайте писать скрипты...» Архивировано из оригинала 28 июля 2017 г. Получено 14 апреля 2019 г. У всех разработчиков языков есть свои случайные особенности. Я просто лучше в этом, чем большинство.
  9. ^ Лэпворт, Лео. "Общие вопросы о Perl". Perl FAQ . Perl.org. Архивировано из оригинала 28 мая 2013 г. Получено 24 февраля 2012 г.
  10. ^ "perl(1): Practical Extraction/Report Language - Linux man page". Linux.die.net. Архивировано из оригинала 3 июня 2013 г. Получено 23 июля 2013 г.
  11. ^ abcdef Лонг, Тони. "18 декабря 1987 г.: Perl упрощает лабиринт, который является языком программирования". Wired . ISSN  1059-1028 . Получено 14 февраля 2023 г. .
  12. Шеппард, Дуг (16 октября 2000 г.). «Введение в Perl для начинающих». dev.perl.org. Архивировано из оригинала 5 июня 2011 г. Получено 8 января 2011 г.
  13. ^ ab "Ларри Уолл, гуру Perl". Linux Journal . Получено 30 августа 2023 г.
  14. ^ "About Perl". perl.org. Архивировано из оригинала 6 ноября 2015 г. Получено 20 апреля 2013 г."Perl" — это семейство языков, "Perl 6" — часть семейства, но это отдельный язык, имеющий собственную команду разработчиков. Его существование не оказывает существенного влияния на продолжающуюся разработку "Perl 5".
  15. ^ "Path to Raku". GitHub. Архивировано из оригинала 12 ноября 2020 г. Получено 14 января 2021 г. В этом документе описываются шаги, которые необходимо предпринять для переименования Perl 6 в Raku
  16. ^ abcd Уолл, Ларри ; Кристиансен, Том; Орвант, Джон (июль 2000 г.). Программирование на Perl, третье издание . O'Reilly Media . ISBN 978-0-596-00027-1.
  17. ^ "Как измеряются программы". Computer Language Benchmarks Game, Debian.net . Архивировано из оригинала 12 июля 2020 г. Получено 5 октября 2020 г.
  18. ^ "RSA в 3 строках perl - Everything2.com". everything2.com . Архивировано из оригинала 8 октября 2020 г. . Получено 5 октября 2020 г. .
  19. ^ "Language Evaluations". Архивировано из оригинала 10 марта 2015 г. Получено 30 января 2015 г. Самая сильная сторона Perl — его чрезвычайно мощные встроенные возможности для шаблонно-ориентированной обработки текстовых, строчно-ориентированных форматов данных; в этом он непревзойден.
  20. ^ "You Used Perl to Write WHAT?!". 24 января 2008 г. Архивировано из оригинала 4 февраля 2015 г. Получено 4 февраля 2015 г. perl всегда был языком-поводом для любой задачи, которая включает в себя сопоставление входных данных с шаблоном
  21. ^ "The Importance of Perl". Архивировано из оригинала 2 февраля 2015 г. Получено 4 февраля 2015 г. Непревзойденная способность Perl обрабатывать текст...
  22. ^ Смит, Родерик В. (21 июня 2002 г.). Advanced Linux Networking . Addison-Wesley Professional. стр. 594. ISBN 978-0-201-77423-8.
  23. Шеппард, Дуг (16 октября 2000 г.). «Введение в Perl для начинающих». O'Reilly Media . Архивировано из оригинала 4 июня 2008 г. Получено 27 июля 2008 г.
  24. ^ Леонард, Эндрю. «Радость Perl». Salon.com . Архивировано из оригинала 6 июля 2012 г. Получено 5 июня 2012 г.
  25. ^ "Scripting on the Lido Deck". Wired . 7 марта 2016 г. Архивировано из оригинала 7 марта 2016 г. Получено 14 февраля 2023 г.
  26. Ричардсон, Марджори (1 мая 1999 г.). «Ларри Уолл, гуру Perl». Linux Journal . Архивировано из оригинала 20 июля 2013 г. Получено 3 января 2011 г.
  27. ^ Шварц, Рэндал ; Фой, Брайан ; Феникс, Том (16 июня 2011 г.). Изучение Perl . O'Reilly Media, Inc. стр. 4. ISBN 978-1449313142. Perl иногда называют «Практическим языком извлечения и отчётов», хотя его также называют «Патологически эклектичным мусорным листером» среди других расширений. На самом деле это бэкроним, а не акроним, поскольку Ларри Уолл, создатель Perl, сначала придумал название, а расширение — позже. Вот почему «Perl» не написано заглавными буквами. Нет смысла спорить, что расширение правильно: Ларри одобряет оба.
  28. ^ Уолл, Ларри . "perl - Интерпретатор языка Perl". Документация Perl 5 версии 12.2 . Архивировано из оригинала 1 июля 2013 г. Получено 26 января 2011 г.
  29. ^ ab Шварц, Рэндал Л .; Феникс, Том; Фой, Брайан (6 декабря 2007 г.). Изучение Perl, третье издание. O'Reilly Media. ISBN 978-0-596-00132-2.
  30. ^ ab "The Perl Camel Usage and Trademark Information". O'Reilly Media . Архивировано из оригинала 25 апреля 2018 г. Получено 9 января 2011 г.
  31. ^ "Perl Trademark". Perl Foundation . Архивировано из оригинала 3 мая 2011 г. Получено 9 января 2011 г.
  32. Gillmore, Dan (25 октября 1998 г.). "Republic Of Perl". Chicago Tribune . Архивировано из оригинала 30 апреля 2011 г. Получено 10 января 2011 г.
  33. ^ abc Kalita, Jugal (декабрь 2003 г.). На Perl: Perl для студентов и профессионалов. Universal-Publishers. ISBN 978-1-58112-550-4.
  34. ^ "Perl Culture". docstore.mik.ua . Получено 16 марта 2023 г. .
  35. ^ Холлоуэй, Рут. «Perl исполняется 30 лет, и его сообщество продолжает процветать». Opensource.com . Получено 23 июня 2023 г. .
  36. ^ "Программирование Perl, 3-е издание [Книга]". www.oreilly.com . Получено 11 апреля 2023 г. .
  37. ^ "perlhist - записи истории Perl - браузер Perldoc". perldoc.perl.org . Получено 28 июля 2023 г. .
  38. ^ "Архив perl.perl5.porters". perl.org. Архивировано из оригинала 1 мая 2011 г. Получено 13 января 2011 г.
  39. ^ ab "perlhist: записи истории Perl". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 13 января 2011 г. Получено 21 января 2011 г.
  40. ^ "Perl: определение, история и факты". Britannica.com . Получено 15 июня 2022 г. .
  41. ^ "CPAN". CPAN . Архивировано из оригинала 3 октября 2019 г. . Получено 19 декабря 2022 г. .
  42. ^ ab "perl5004delta – что нового в perl5.004". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 27 февраля 2011 г. Получено 8 января 2011 г.
  43. ^ Патвардхан, Натан; Сивер, Эллен; Спейнхаур, Стивен (2002). Perl in a Nutshell, второе издание. O'Reilly Media . ISBN 978-0-596-00241-1.
  44. ^ "perl5005delta - что нового в perl5.005". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 3 февраля 2011 г. Получено 21 января 2011 г.
  45. ^ "Perl Source". cpan.org . Получено 26 ноября 2023 г. .
  46. ^ "perl56delta - что нового в perl v5.6.0". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 2 февраля 2011 г. Получено 21 января 2011 г.
  47. ^ "perl56delta - что нового в perl v5.6.x". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 18 ноября 2010 г. Получено 21 января 2011 г.
  48. ^ "Perl | Определение, история и факты | Britannica". www.britannica.com . Получено 15 июня 2022 г. .
  49. Уолл, Ларри. «Апокалипсис 1: Злое, плохое и хорошее». Архивировано из оригинала 23 ноября 2010 г. Получено 8 января 2011 г.
  50. ^ "perl58delta - что нового в perl v5.8.0". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 21 ноября 2010 г. Получено 21 января 2011 г.
  51. ^ "План для мопсов". O'Reilly Media . 3 марта 2005 г. Архивировано из оригинала 8 сентября 2012 г. Получено 27 января 2011 г.
  52. ^ Тан, Одри (21 апреля 2010 г.). "Re: Как реализовать Perl 6 за десять лет". PerlMonks . Архивировано из оригинала 11 мая 2011 г. Получено 3 января 2011 г.
  53. Broadwell, Geoff (8 августа 2005 г.), OSCON 4.4: Inside Ponie, мост от Perl 5 к Perl 6, блог O'Reilly ONLamp, архивировано из оригинала 14 марта 2012 г. , извлечено 27 июня 2016 г.
  54. Винсент, Джесси (23 августа 2006 г.), Пони отправлен на пастбище, The Perl Foundation, архивировано из оригинала 27 июня 2009 г. , извлечено 15 января 2019 г.
  55. ^ "perl5100delta - что нового в perl 5.10.0". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 21 декабря 2010 г. Получено 8 января 2011 г.
  56. ^ "perlsyn - Синтаксис Perl". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 26 августа 2013 г. Получено 21 января 2011 г.
  57. ^ "perl5120delta - что нового в perl v5.12.0". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 4 января 2011 г. Получено 8 января 2011 г.
  58. ^ "perl5140delta - что нового в perl v5.14.0 - metacpan.org". metacpan.org . Архивировано из оригинала 25 июля 2018 г. . Получено 22 июля 2017 г. .
  59. ^ ab "perl5160delta - что нового в perl v5.16.0". perldoc.perl.org . Получено 21 мая 2012 г. .
  60. ^ "perl5180delta - что нового в perl v5.18.0 - язык программирования Perl". Документация Perl 5 версии 18.0 . metacpan.org. Архивировано из оригинала 29 октября 2013 г. Получено 27 октября 2013 г.
  61. ^ "perl5200delta - что нового в perl v5.20.0 - язык программирования Perl". Документация Perl 5 версии 20.0 . metacpan.org. Архивировано из оригинала 27 мая 2014 г. Получено 27 мая 2014 г.
  62. Вехи эпохи Возрождения Perl – Современное программирование на Perl Архивировано 27 октября 2012 г. на Wayback Machine . Modernperlbooks.com. Получено 17 июля 2013 г.
  63. Предисловие (Modern Perl 2011-2012) Архивировано 28 сентября 2012 г. на Wayback Machine . Modernperlbooks.com. Получено 17 июля 2013 г.
  64. Modern Perl 2011-2012 edition by chromatic |Onyx Neon Press Архивировано 22 декабря 2011 г. на Wayback Machine . Onyxneon.com. Получено 17 июля 2013 г.
  65. ^ "Enlightened Perl". Enlightened Perl . Архивировано из оригинала 5 февраля 2014 года . Получено 28 сентября 2012 года .
  66. ^ "YAPC::NA 2013 – 3–5 июня, Остин, Техас". Yapcna.org. 4 июня 2013 г. Архивировано из оригинала 22 июня 2013 г. Получено 11 апреля 2014 г.
  67. ^ Литтл, Стеван (8 февраля 2013 г.). «Что такое Мо (уточнение) | Стеван Литтл». Blogs.perl.org. Архивировано из оригинала 19 декабря 2013 г. Получено 11 апреля 2014 г.
  68. ^ "p2 on potion". Perl11.org. 7 февраля 2004 г. Архивировано из оригинала 24 сентября 2013 г. Получено 11 апреля 2014 г.
  69. ^ "goccy/gperl 路 GitHub". GitHub.com. Архивировано из оригинала 23 февраля 2015 г. Получено 11 апреля 2014 г.
  70. ^ "rperl". RPerl.org. Архивировано из оригинала 18 октября 2014 г. Получено 11 августа 2014 г.
  71. ^ "Perl 6". Проект Perl 6. Архивировано из оригинала 21 февраля 2011 г. Получено 27 февраля 2011 г.
  72. ^ Торкингтон, Натан. «Транскрипция выступления Ларри». nntp.perl.org. Архивировано из оригинала 1 мая 2011 г. Получено 25 января 2011 г.
  73. ^ "Perl6 - Будущее Perl". www.java-samples.com . Получено 18 мая 2021 г. .
  74. ^ "Официальная документация Perl 6". Проект Perl 6. Архивировано из оригинала 31 августа 2009 г. Получено 25 января 2011 г.
  75. ^ Kuhn, Bradley M. (январь 2001 г.). Размышления о портировании Perl на виртуальную машину Java (диссертация на степень магистра). Университет Цинциннати. Архивировано из оригинала 21 марта 2008 г. Получено 28 июня 2008 г.
  76. ^ chromatic (2015). Современный Perl. Pragmatic Bookshelf. ISBN 978-1-68050-088-2.
  77. ^ "Сравнение функций компиляторов Perl 6". Архивировано из оригинала 11 августа 2017 г. Получено 28 марта 2012 г.
  78. ^ Уортингтон, Джонатан (15 июля 2013 г.). «Новости Rakudo JVM: больше тестов, плюс прототипы Thread и Promise». 6guts . Архивировано из оригинала 5 октября 2013 г. . Получено 24 июля 2013 г. .
  79. Уортингтон, Джонатан (31 мая 2013 г.). «MoarVM: виртуальная машина для NQP и Rakudo». 6guts . Архивировано из оригинала 9 июля 2013 г. . Получено 24 июля 2013 г. .
  80. ^ "rename-lwn". Архивировано из оригинала 17 октября 2019 г. Получено 10 ноября 2019 г.
  81. ^ "rakudo/rakudo - GitHub". GitHub.com. Архивировано из оригинала 29 июля 2017 г. Получено 21 сентября 2013 г.
  82. ^ ab "Perl 7 анонсирован на Perl Conference in the Cloud". perlfoundation.org. 24 июня 2020 г. Архивировано из оригинала 26 июня 2020 г. Получено 24 июня 2020 г.
  83. ^ ab "Announcing Perl 7". perl.com. 24 июня 2020 г. Архивировано из оригинала 24 июня 2020 г. Получено 24 июня 2020 г.
  84. ^ Кларк, Николас (9 мая 2021 г.). «Заседание руководящего совета № 019 2021-05-06». www.nntp.perl.org . Архивировано из оригинала 18 мая 2021 г. . Получено 17 мая 2021 г. План остается таким же, что будет толчок Perl 7, но не сразу после выпуска 5.34.0. ... Мы не думаем, что сможем доставить [Perl 7] за 12 месяцев. 
  85. ^ Подготовка к Perl 7d. leanpub.com. 24 июня 2020 г. Архивировано из оригинала 25 июня 2020 г. Получено 24 июня 2020 г.
  86. ^ Perl Steering Council. «Что случилось с Perl 7?». blogs.perl.org . Получено 7 июля 2022 г. .
  87. ^ Ричардсон, Марджори. «Ларри Уолл, гуру Perl | Linux Journal». www.linuxjournal.com . Linux Journal . Получено 16 января 2023 г. .
  88. ^ Шварц, Алан (декабрь 1998 г.). «Учебник: Perl, психологически эффективный язык переформатирования». Методы исследования поведения, инструменты и компьютеры . 30 (4): 605–609. doi : 10.3758/BF03209477 . ISSN  0743-3808. S2CID  61028367.
  89. ^ Гилберт, Джеймс ГР (март 2002 г.). «Как стать головастиком-программистом». Nature Biotechnology . 20 (3): 221. doi :10.1038/nbt0302-221. ISSN  1087-0156. S2CID  38728402.
  90. ^ "Падение Perl, самого многообещающего языка Интернета". FastCompany . 13 февраля 2014 г.
  91. ^ Уолл, Ларри. "perl - Интерпретатор языка Perl 5 - Браузер Perldoc". perldoc.perl.org . Получено 24 июня 2021 г. .
  92. Уолл, Ларри (1 марта 1997 г.). «Wherefore Art, Thou?». Linux Journal . Архивировано из оригинала 9 декабря 2010 г. Получено 13 марта 2011 г.
  93. ^ "perlfunc - встроенные функции Perl". Документация Perl 5 версии 12.2 . perldoc.perl.org. Архивировано из оригинала 6 января 2011 г. Получено 10 января 2011 г.
  94. ^ Nagpal, DP (2010). Технология веб-дизайна . Индия: S. Chand. стр. 700. ISBN 978-8121927635.
  95. ^ "название неизвестно". 10 мая 1997 г. Usenet:  [email protected].[ мертвая ссылка ]
  96. ^ "Обновление для разработчиков". Обновление для разработчиков доктора Добба . 2. Миллер-Фримен. 1995.
  97. ^ ab Шварц, Рэндал Л. (1993). Изучение Perl . O'Reilly & Associates. Bibcode :1993lepe.book.....S.
  98. ^ "perlintro". Документация Perl 5 версии 18.0 . Perl 5 Porters и perldoc.perl.org. Архивировано из оригинала 9 января 2011 г. Получено 30 июня 2013 г.
  99. ^ "perlstyle". Документация Perl 5 версии 18.0 . Perl 5 Porters и perldoc.perl.org. Архивировано из оригинала 26 июня 2013 г. Получено 30 июня 2013 г.
  100. ^ ab "Perl 6 FAQ". Perl 6 Project. Архивировано из оригинала 1 июля 2013 г. Получено 30 июня 2013 г.
  101. ^ ab chromatic (31 декабря 2012 г.). "Реализация Perl 5 по сравнению с Perl 6". Архивировано из оригинала 29 июля 2013 г. Получено 30 июня 2013 г.
  102. ^ "Perl 6 Specification". Проект Perl 6. Архивировано из оригинала 2 декабря 2009 г. Получено 27 января 2011 г.
  103. ^ "Perl 6 Compilers". Проект Perl 6. Архивировано из оригинала 2 декабря 2009 г. Получено 27 января 2011 г.
  104. ^ Описание интерпретатора Perl 5 можно найти в Programming Perl , 3-е изд., глава 18. В частности, см. страницу 467, где тщательно разграничиваются фаза выполнения и фаза компиляции от времени выполнения и времени компиляции . «Время» и «фаза» Perl часто путают.
  105. ^ "perlguts - Введение в API Perl - Браузер Perldoc". perldoc.perl.org . Получено 24 января 2022 г. .
  106. ^ Шварц, Рэндал . "О разборе Perl". Архивировано из оригинала 27 сентября 2007 г. Получено 3 января 2007 г.
  107. ^ "The Perl Journal #19/9.26" (PDF) . O'Reilly Media . Получено 4 февраля 2011 г. .[ постоянная мертвая ссылка ]
  108. ^ Кеглер, Джеффри (7 октября 2011 г.). «Perl и синтаксический анализ 11: все ли программы Perl поддаются синтаксическому анализу?» . Получено 25 октября 2022 г. ... похоже, мы не отказываемся ни от чего. Никто никогда не смог показать практический недостаток
  109. ^ Кеннеди, Адам (2006). "PPI—Parse, Analyze and Manipulate Perl (without Perl)". CPAN . Архивировано из оригинала 3 сентября 2013 г. Получено 16 сентября 2013 г.
  110. ^ "Теорема Райса". The Perl Review . 4 (3): 23–29. Лето 2008.и «Perl неразрешим». Обзор Perl . 5 : 7–11. Осень 2008 г., доступно онлайн у Кеглера, Джеффри. "Perl и неразрешимость". Архивировано из оригинала 17 августа 2009 г. Получено 4 января 2009 г.
  111. ^ Hietaniemi, Jarkko (1998). "Perl Ports (Binary Distributions)". CPAN.org. Архивировано из оригинала 18 апреля 2006 г. Получено 16 апреля 2006 г.
  112. ^ "The MacPerl Pages". Prime Time Freeware. 1997. Архивировано из оригинала 18 января 2006 года . Получено 18 января 2006 года .
  113. ^ "Perl Ports (Binary Distributions)". CPAN . Архивировано из оригинала 18 апреля 2006 г. Получено 27 января 2011 г.
  114. ^ "ActivePerl — это Perl для Windows, Mac, Linux, AIX, HP-UX и Solaris". ActiveState Software. Архивировано из оригинала 31 марта 2016 г. Получено 9 января 2011 г.
  115. ^ "Использование PPM". ActiveState Software . Архивировано из оригинала 27 августа 2010 г. Получено 9 января 2011 г.
  116. ^ Крейн, Дана (23 июля 2019 г.). «Прощай, PPM, здравствуй, State Tool». Activestate.com . Архивировано из оригинала 28 июля 2020 г. Получено 16 апреля 2020 г.
  117. ^ readme.txt
  118. ^ "Alioth: The Computer Language Benchmarks Game: Project Info". Alioth . Архивировано из оригинала 25 марта 2013 г. Получено 13 января 2011 г.
  119. ^ "Какие программы самые быстрые?". Computer Language Benchmarks Game . Alioth . Архивировано из оригинала 17 мая 2013 г. Получено 13 января 2011 г.
  120. Leroy, Jean-Louis (1 декабря 2005 г.). «Своевременное начало». O'Reilly. Архивировано из оригинала 13 июня 2006 г. Получено 22 мая 2006 г.
  121. ^ Beattie, Malcolm & Enache Adrian (2003). "B::Bytecode Perl compiler's bytecode backend". CPAN . Архивировано из оригинала 30 марта 2021 г. Получено 16 сентября 2013 г.
  122. ^ Шварц, Рэндал; Фой, Брайан; Феникс, Том (23 июня 2011 г.). Изучение Perl. "O'Reilly Media, Inc.". ISBN 978-1-4493-0358-7.
  123. ^ Стайн, Линкольн; МакИчерн, Дуг (1999). Написание модулей Apache с помощью Perl и C: API Apache и Mod_perl. "O'Reilly Media, Inc.". ISBN 978-1-56592-567-0.
  124. ^ Бекман, Стас; Шоле, Эрик (2003). Практический Mod_perl. "O'Reilly Media, Inc.". ISBN 978-0-596-00227-5.
  125. ^ Ингерсон, Брайан. "Inline - metacpan.org". CPAN . Архивировано из оригинала 13 июня 2013 г. Получено 26 января 2011 г.
  126. ^ Gilmore, WJ (2010). Начало PHP и MySQL: от новичка до профессионала, четвертое издание . Apress. стр. 484. ISBN 978-1-4302-3114-1.
  127. ^ «Служба поддержки IMDb: Какое программное обеспечение/оборудование вы используете для работы сайта?». Internet Movie Database . Архивировано из оригинала 9 марта 2017 г. Получено 12 февраля 2011 г.
  128. ^ DuckDuckGo обрабатывает огромное количество поисковых запросов — 4,5 миллиона запросов в день. https://duckduckgo.com/traffic.html Архивировано 15 февраля 2012 г. в веб-архиве Библиотеки Конгресса .
  129. ^ DuckDuckGo использует Perl https://web.archive.org/web/20101231135106/http://www.gabrielweinberg.com/blog/2009/03/duck-duck-go-architecture.html
  130. ^ "Perl FAQ". Архивировано из оригинала 6 августа 2019 г. . Получено 6 августа 2019 г. Perl довольно широко используется в Debian. Не только некоторые основные функции написаны на Perl, но и более 700 пакетов в нестабильной ветке содержат perl в своем названии (март 2004 г.).
  131. ^ "Perl Books - Book: Data Munging with Perl". Perl.org . Архивировано из оригинала 7 сентября 2011 г. Получено 30 декабря 2010 г.
  132. ^ Декарт, Аллигатор; Банс, Тим (2000). Программирование Perl DBI : [программирование баз данных с помощью Perl] (1-е изд.). Пекин [ua]: O'Reilly. ISBN 978-1-56592-699-8.
  133. ^ "Программирование на Perl - Принципы языков программирования". sites.google.com . Архивировано из оригинала 8 октября 2020 г. . Получено 18 мая 2021 г. .
  134. ^ Банс, Тим; Декарт, Аллигатор (4 февраля 2000 г.). Программирование Perl DBI: Программирование баз данных с помощью Perl. "O'Reilly Media, Inc.". ISBN 978-1-4493-1536-8.
  135. ^ Бекман, Стас. "Эффективная работа с базами данных под mod_perl". Архивировано из оригинала 22 августа 2007 г. Получено 1 сентября 2007 г.
  136. ^ Пачев, Саша (10 апреля 2007 г.). Понимание внутреннего устройства MySQL: открытие и улучшение отличной базы данных. "O'Reilly Media, Inc.". ISBN 978-0-596-55280-0.
  137. ^ "Class::DBI - Simple Database Abstraction - metacpan.org". metacpan.org . Архивировано из оригинала 6 августа 2020 г. . Получено 8 апреля 2020 г. .
  138. ^ "Rose::DB::Object - Расширяемый, высокопроизводительный объектно-реляционный преобразователь (ORM). - metacpan.org". metacpan.org . Архивировано из оригинала 6 августа 2020 г. . Получено 8 апреля 2020 г. .
  139. ^ "T sql querying developer reference". pdfpremiumfree.com . Получено 18 мая 2021 г. .
  140. Уолл, Ларри (22 мая 2014 г.). «Perl Culture (AKA the first State of the Onion)». Архивировано из оригинала 22 мая 2014 г. Получено 22 мая 2014 г.
  141. ^ Уолл, Ларри . "2nd State of the Onion". Архивировано из оригинала 17 июля 2012 г. Получено 12 октября 2012 г.(Поиск по слову «церковь»)
  142. ^ Шварц, Рэндал Л. (2 мая 1999 г.). «Кто просто очередной хакер Perl?». Группа новостей : comp.lang.perl.misc. Usenet:  [email protected]. Архивировано из оригинала 8 июля 2012 г. Получено 5 декабря 2014 г.
  143. Шварц, Рэндал (31 марта 2005 г.). «Канонический JAPH». PerlMonks . Архивировано из оригинала 22 июля 2011 г. Получено 16 мая 2011 г.
  144. ^ Bacon, Greg (28 мая 1999 г.). "Re: Incrementing a value in a slice". Группа новостей : comp.lang.perl.misc. Usenet:  [email protected]. Архивировано из оригинала 7 июля 2011 г. Получено 12 июля 2011 г.
  145. Back, Adam. "RSA в 5 строках perl". Архивировано из оригинала 19 января 2011 г. Получено 10 января 2011 г.
  146. ^ "Code Golf: Что такое Code Golf?". 29degrees. 2007. Архивировано из оригинала 13 января 2012 г. Получено 26 ноября 2018 г.
  147. ^ Галло, Феликс (2003). "The Zeroth Obfuscated Perl Contest" (PDF) . В Jon Orwant (ред.). Игры, развлечения и культура Perl: лучшее из журнала Perl . O'Reilly Media. Архивировано из оригинала (PDF) 22 ноября 2009 г. . Получено 12 января 2011 г. .
  148. ^ "Perl Poetry". PerlMonks . Архивировано из оригинала 27 сентября 2007 г. Получено 27 января 2011 г.

Дальнейшее чтение

Внешние ссылки