Это хорошая статья. Для получения дополнительной информации нажмите здесь.
Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Perl представляет собой семейство два высокого уровня , общего назначения , интерпретируемых , динамических языков программирования . «Perl» относится к Perl 5, но с 2000 по 2019 г. он также относился к своему переработанному «сестринскому языку», Perl 6, до того, как последний был официально изменен на Raku в октябре 2019 года. [10] [11] Perl 7, продолжение. от Perl 5, а не Perl 6, также выйдет в 2021 году.

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

Языки Perl заимствуют функции других языков программирования, включая C , сценарий оболочки ( sh ), AWK и sed ; [15] Уолл также ссылается на BASIC и Lisp во введении к Learning Perl (Schwartz & Christiansen) и так далее. [16] Они предоставляют средства обработки текста без ограничений произвольной длины данных, как у многих современных инструментов командной строки Unix , [17] облегчая манипулирование текстовыми файлами . Perl 5 получил широкую популярность в конце 1990-х как сценарий CGI.язык, отчасти из-за его непревзойденных возможностей регулярного выражения и синтаксического анализа строк . [18] [19] [20] [21]

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

Perl - очень выразительный язык программирования: исходный код данного алгоритма может быть коротким и хорошо сжимаемым. [25] [26]

История [ править ]

Ранние версии [ править ]

Ларри Уолл начал работу над Perl в 1987 году, работая программистом в Unisys , [17] и выпустил версию 1.0 в группу новостей comp.sources.misc 18 декабря 1987 года. [27] Язык быстро расширился в течение следующих нескольких лет. .

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

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

Ранний Perl 5 [ править ]

Perl 4 прошел через серию релизов обслуживания , что привело к Perl 4.036 в 1993 году, после чего стена отказались от Perl 4 , чтобы начать работу над Perl 5. Начальный дизайн Perl 5 продолжение в 1994 году perl5-носильщики список рассылки был создан в мае 1994 года координировать работу по переносу Perl 5 на разные платформы. Он остается основным форумом для разработки, сопровождения и портирования Perl 5. [28]

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

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

Одно из самых важных событий в истории Perl 5 произошло за пределами самого языка и было следствием его модульной поддержки. 26 октября 1995 г. была создана Comprehensive Perl Archive Network (CPAN) как репозиторий для языка Perl и модулей Perl ; по состоянию на май 2017 года он содержит более 185 178 модулей в 35 190 дистрибутивах, написанных более чем 13 071 автором, и отражен по всему миру в более чем 245 местах. [30]

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

Perl 5.004 также добавил поддержку Microsoft Windows и некоторых других операционных систем. [31]

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

2000–2020 [ править ]

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

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

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

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

18 декабря 2007 года, в год 20-летия Perl 1.0, был выпущен Perl 5.10.0. Perl 5.10.0 включает заметные новые функции, которые приближают его к Perl 6. К ним относятся оператор switch (называемый «задано» / «когда»), обновления регулярных выражений и оператор интеллектуального сопоставления (~~). [42] [43] Примерно в то же время началась серьезная разработка другой реализации 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. [44] 21 января 2011 года был выпущен Perl 5.12.3; он содержит обновленные модули и некоторые изменения в документации. [45] Версия 5.12.4 был выпущен 20 июня 2011 года последняя версия этой отрасли, 5.12.5, был выпущен 10 ноября 2012 года [ править ]

14 мая 2011 года был выпущен Perl 5.14. Поддержка JSON встроена в 5.14.0. [46] Последняя версия этой ветки, 5.14.4, была выпущена 10 марта 2013 г. [ необходима ссылка ]

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

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

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

Некоторые обозреватели считают выпуск Perl 5.10 началом движения Modern Perl. [50] В частности, эта фраза описывает стиль разработки, который включает использование CPAN, использует преимущества последних разработок в языке и строго относится к созданию высококачественного кода. [51] В то время как книга «Современный Perl» [52] может быть наиболее заметным носителем этой идеи, другие группы, такие как Enlighted Perl Organization [53] , поддержали ее идею .

В конце 2012 и 2013 годов стартовало несколько проектов по альтернативной реализации Perl 5: Perl5 на Perl6 командой Rakudo Perl, [54] moe Стивеном Литтлом и его друзьями, [55] p2 [56] командой Perl11 под руководством Рейни Урбана, gperl от goccy, [57] и rperl - проект кикстартера, возглавляемый Уиллом Брасвеллом и связанный с проектом Perll11. [58]

С 2020 г. [ править ]

В июне 2020 года Perl 7 был объявлен преемником Perl 5. [59] Perl 7 изначально будет основан на Perl 5.32 с выпуском, ожидаемым в первой половине 2021 года, и выпустит кандидатов раньше. [60] Когда будет выпущен Perl 7, Perl 5 будет находиться в долгосрочном обслуживании. Однако в поддерживаемых версиях Perl 5 будут по-прежнему исправлены важные ошибки безопасности и исправления. [61]

ПОНИ [ править ]

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

Проект PONIE завершился в 2006 году и более активно не развивается. Некоторые улучшения, внесенные в интерпретатор Perl 5 как часть PONIE, были включены в этот проект. [63]

Имя [ редактировать ]

Первоначально Perl назывался «Жемчужина». Уолл хотел дать языку короткое название с положительной коннотацией; он утверждает, что рассматривал каждое трех- и четырехбуквенное слово в словаре. Он также подумал о том, чтобы назвать его в честь своей жены Глории. Уолл обнаружил существующий язык программирования PEARL до официального выпуска Perl и изменил написание имени. [64]

Обращаясь к языку, имя обычно пишется с заглавной буквы ( Perl ) как существительное собственное. Когда речь идет о самой программе-интерпретаторе, имя часто пишется без заглавных букв ( perl ), потому что большинство Unix-подобных файловых систем чувствительны к регистру. Перед выпуском первой редакции Programming Perl этот язык обычно назывался perl ; Рэндал Л. Шварц , однако, использовал название языка в книге с заглавной буквы, чтобы он лучше выделялся при наборе. Это различие падежей впоследствии было задокументировано как каноническое. [65]

Название иногда расширяется как « Практический язык извлечения» и «Язык отчетов» , но это бэкроним . [66] Другие расширения были предложены как столь же канонические, в том числе собственный список патологически эклектичного мусора Уолла, который находится на странице руководства для perl. [67] Действительно, Уолл утверждает, что это имя было задумано, чтобы вдохновить на множество различных расширений. [68]

Символ верблюда [ править ]

Символ верблюда, используемый O'Reilly Media

Programming Perl , опубликованный O'Reilly Media , содержит изображение верблюда-верблюда на обложке и обычно называется «Книгой верблюдов». [69] Это изображение верблюда стало неофициальным символом Perl, а также общей эмблемой хакеров , появляющейся на футболках и других предметах одежды. [ необходима цитата ]

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

Символ лука [ править ]

Луковый логотип, используемый Фондом Perl

Perl Foundation владеет альтернативным символом, луковицей, который он лицензирует своим дочерним компаниям, Perl Mongers , PerlMonks , Perl.org и другим. [71] Этот символ представляет собой каламбур на жемчужном луке . [72]

Символ ящера [ править ]

Альтернативный логотип Perl 5

Себастьян Ридель, создатель Mojolicious , создал логотип с изображением динозавра-хищника , который доступен по лицензии CC-SA, версия 4.0. [73] Логотип переделывается и используется в разных местах и ​​символизирует Perl 5. Аналог raptor взят из серии выступлений Мэтта С. Траута, начатых в 2010 году. [74] Эти переговоры были нацелены на то, чтобы стать более Perl. 5 ориентированы на сообщество, в период, когда Perl 6 был горячей темой. [ необходима цитата ]

Обзор [ править ]

По словам Уолла, у Perl есть два слогана. Первый - « Есть несколько способов сделать это », широко известный как TMTOWTDI. Второй слоган: «Легкие должны быть легкими, а сложные - возможными». [17]

Особенности [ править ]

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

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

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

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

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

Дизайн [ править ]

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

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

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

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

Perl не навязывает какую-либо конкретную парадигму программирования ( процедурную , объектно-ориентированную , функциональную или другие) и даже не требует от программиста выбора между ними. [ необходима цитата ]

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

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

Приложения [ править ]

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

Perl в основном использовался для написания сценариев CGI : большие проекты, написанные на Perl, включают cPanel , Slash , Bugzilla , RT , TWiki и Movable Type ; Сайты с высокой посещаемостью, которые широко используют Perl, включают Priceline.com , Craigslist , [80] IMDb , [81] LiveJournal , DuckDuckGo , [82] [83] Slashdot и Ticketmaster . Это также дополнительный компонент популярного стека технологий LAMP для веб-разработки.вместо PHP или Python . Perl широко используется как язык системного программирования в дистрибутиве Debian GNU / Linux. [84]

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

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

Графические пользовательские интерфейсы (GUI) могут быть разработаны с использованием Perl. Например, Perl / Tk и wxPerl обычно используются для обеспечения взаимодействия пользователя со сценариями Perl. Такое взаимодействие может быть синхронным или асинхронным с использованием обратных вызовов для обновления графического интерфейса. [ необходима цитата ]

Реализация [ править ]

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

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

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

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

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

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

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

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

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

Доступность [ править ]

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

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

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

Windows [ править ]

Пользователи Microsoft Windows обычно устанавливают один из собственных двоичных дистрибутивов Perl для Win32, чаще всего Strawberry Perl или ActivePerl . Компиляция Perl из исходного кода под Windows возможна, но в большинстве установок отсутствует необходимый компилятор C и инструменты сборки. Это также затрудняет установку модулей из CPAN, особенно тех, которые частично написаны на C. [ необходима ссылка ]

ActivePerl - это дистрибутив с закрытым исходным кодом от ActiveState, который имеет регулярные выпуски, отслеживающие основные выпуски Perl. [94] Дистрибутив ранее включал диспетчер пакетов Perl (PPM), [95] популярный инструмент для установки, удаления, обновления и управления использованием общих модулей Perl, однако этот инструмент был прекращен с ActivePerl 5.28. [96] Включен также PerlScript , механизм Windows Script Host (WSH), реализующий язык Perl. Visual Perl - это инструмент ActiveState, который добавляет Perl в пакет разработки Visual Studio .NET. VBScriptв Perl преобразователь, а также компилятор Perl для Windows и преобразователи awk и sed в Perl также были произведены этой компанией и включены на компакт-диск ActiveState для Windows , который включает все их дистрибутивы, а также Komodo IDE и все, кроме первый в его варианте Unix / Linux / Posix в 2002 году и впоследствии. [97]

Strawberry Perl - это дистрибутив с открытым исходным кодом для Windows. С января 2008 года он выпускает регулярные ежеквартальные выпуски, включая новые модули по мере поступления отзывов и запросов. Strawberry Perl нацелен на то, чтобы иметь возможность устанавливать модули, подобные стандартным дистрибутивам Perl, на других платформах, включая компиляцию модулей XS. [ необходима цитата ]

Cygwin эмуляции еще один способ запуска Perl под Windows. Cygwin предоставляет Unix-подобную среду в Windows, и Perl и CPAN доступны как стандартные предварительно скомпилированные пакеты в программе установки Cygwin. Поскольку Cygwin также включает gcc , также возможна компиляция Perl из исходных текстов. [ необходима цитата ]

Исполняемый файл Perl включен в несколько наборов ресурсов Windows в каталоге с другими инструментами создания сценариев. [ необходима цитата ]

Реализации Perl поставляются с MKS Toolkit , Interix (основа более ранних реализаций Windows Services для Unix ) и UWIN . [ необходима цитата ]

Интерфейсы базы данных [ править ]

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

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

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

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

Сравнительная производительность [ править ]

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

Большие программы Perl запускаются медленнее, чем аналогичные программы на компилируемых языках, потому что Perl должен компилировать исходный код каждый раз при запуске. В своем выступлении на конференции YAPC :: Europe 2005 и в последующей статье «Своевременное начало» Жан-Луи Лерой обнаружил, что выполнение его программ Perl заняло гораздо больше времени, чем ожидалось, поскольку интерпретатор Perl потратил значительное время на поиск модулей в пределах своего чрезмерно большого объема. включить путь. [104] В отличие от Java, Python и Ruby, Perl имеет только экспериментальную поддержку предварительной компиляции. [105] Следовательно, программы Perl платят за эти накладные расходы при каждом выполнении. Фаза выполнения типичных программ достаточно продолжительна, чтобы амортизироватьвремя запуска незначительно, но тесты, измеряющие очень короткое время выполнения, вероятно, будут искажены из-за этих накладных расходов. [ необходима цитата ]

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

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

Оптимизация [ править ]

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

Perl 5 [ править ]

Perl 5, язык, обычно называемый Perl, продолжает активно развиваться. Perl 5.12.0 был выпущен в апреле 2010 года с некоторыми новыми функциями, на которые повлиял дизайн Perl 6, [44] [107], за которым следует Perl 5.14.1 (выпущен 17 июня 2011 года), Perl 5.16.1 (выпущен в августе 9, 2012. [108] ) и Perl 5.18.0 (выпущен 18 мая 2013 г.). Разрабатываемые версии Perl 5 выпускаются ежемесячно, а основные выпуски выходят один раз в год. [109]

Относительная доля поисковых запросов «Perl-программирование» в Интернете по сравнению с аналогичными поисками других языков программирования неуклонно снижалась с примерно 10% в 2005 году до примерно 2% в 2011 году и примерно до 0,7% в 2020 году [110].

Раку (Perl 6) [ править ]

Camelia , логотип проекта Perl 6. [111]

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

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

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

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

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

  1. Rakudo , реализация работает на виртуальной машине Parrot и виртуальной машины Java . [116]
  2. Niecza , который нацелен на Common Language Runtime .

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

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

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

Perl 7 [ править ]

Perl 7 был анонсирован 24 июня 2020 года на «конференции Perl в облаке» как преемник Perl 5. [120] [121] Основанный на Perl 5.32, Perl 7 разработан для обеспечения обратной совместимости с современным кодом Perl 5; Код Perl 5 без шаблонного ( pragma ) заголовка необходимо добавить, use compat::perl5;чтобы он оставался совместимым, но современный код может отбросить часть шаблонного.

Сообщество Perl [ править ]

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

Состояние лука [ править ]

State of the Onion - так называется ежегодный краткий обзор развития Perl и его сообщества в стиле программных заметок Wall . Для них характерен его характерный юмор, в котором используются отсылки к культуре Перла, более широкой культуре хакеров, языковому прошлому Уолла, иногда его семейной жизни, а иногда даже его христианскому происхождению. [123]

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

Игры на Perl [ править ]

JAPH
В электронной почте, Usenet и на досках объявлений распространенной тенденцией являются программы « Просто еще один хакер Perl » (JAPH), разработанные Рэндалом Л. Шварцем , одним из первых профессиональных инструкторов Perl. [124] Выражаясь языком Perl-культуры, Perl-программисты известны как Perl-хакеры, и отсюда появилась практика написания коротких программ для печати фразы «Просто еще один Perl-хакер». В духе первоначальной концепции эти программы умеренно запутаны и достаточно короткие, чтобы поместиться в подпись электронного письма или сообщения Usenet. «Канонический» JAPH, разработанный Шварцем, включает запятую в конце, хотя ее часто опускают. [125]
Perl гольф
Perl «гольф» - это времяпрепровождение, заключающееся в сокращении количества символов (клавишных «штрихов»), используемых в Perl-программе, до минимума, почти так же, как игроки в гольф стремятся сделать как можно меньше выстрелов за раунд. Первое использование этой фразы [126] подчеркнуло разницу между обычным кодом, предназначенным для обучения новичков, и краткими хаками, которые могут развлечь опытных программистов Perl, примером которых являются JAPH , которые уже использовались в подписях в сообщениях Usenet и в других местах. Подобные трюки были неназванным времяпрепровождением на языке APL в предыдущие десятилетия. Использование Perl для написания программы, выполняющей шифрование RSA, вызвало широкий практический интерес к этому времяпрепровождению. [127]В последующие годы термин « кодовый гольф » стал применяться к времяпрепровождению на других языках. [128] Perl Golf Apocalypse был проведен на Perl Conference 4.0 в Монтерее, Калифорния, в июле 2000 года.
Запутывание
Как и в случае с C, соревнования по обфускации кода были хорошо известным времяпрепровождением в конце 1990-х годов. Конкурс « Обфусцированный Perl» - это конкурс, проводившийся журналом Perl Journal с 1996 по 2000 год, который стал главным достоинством синтаксической гибкости Perl. Награды присуждались за такие категории, как «самые мощные» - программы, эффективно использующие пространство, - и «лучшая четырехстрочная подпись» за программы, которые умещаются в четыре строки по 76 символов в стиле блока подписи Usenet . [129]
Поэзия
Поэзия Perl - это практика написания стихов, которые могут быть скомпилированы как юридический код Perl, например, произведение, известное как Black Perl . Поэзия Perl стала возможной благодаря большому количеству английских слов, которые используются в языке Perl. Новые стихи регулярно отправляются сообществу PerlMonks . [130]

Perl в IRC [ править ]

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

CPAN Acme [ править ]

Также есть много примеров кода, написанного исключительно для развлечения на CPAN . Lingua::Romana::Perligata, например, позволяет писать программы на латыни . [131] После выполнения такой программы модуль переводит ее исходный код в обычный Perl и запускает его. [ необходима цитата ]

Сообщество Perl выделило пространство имен « Acme » для модулей, которые по своей природе забавны (но его объем расширился и теперь включает исследовательский или экспериментальный код или любой другой модуль, который не предназначен для использования в производственной среде). Некоторые модули Acme намеренно реализованы забавными способами. Сюда входит Acme::Bleachодин из первых модулей в Acme::пространстве имен [132], который позволяет «осветлить» исходный код программы (то есть все символы заменять пробелами) и при этом по-прежнему работать. [ необходима цитата ]

Пример кода [ править ]

В более старых версиях Perl программу Hello World можно было бы написать как:

print  "Hello, World! \ n" ;

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

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

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

$ perl -i.bak -lp -e 's / Bob / Robert / g' * .txt

Критика [ править ]

Критики называли Perl « линейным шумом » и языком только для записи . Самое раннее упоминание такого было в первом издании книги Learning Perl , учебник книги Perl 4 написанного Рэндал Л. Шварц , [133] в первой главе которой он говорит: «Да, иногда Perl выглядит как линия шум к для непосвященного, но для опытного программиста Perl это выглядит как линейный шум с контрольной суммой с жизненной миссией ". [134] Он также заявил, что обвинения в том, что Perl является языком только для записи, можно избежать, написав «с должной осторожностью». [134] В обзорном документе Perl perlintro говорится, что имена встроенных "magic"скалярпеременные «выглядят как знаки препинания или линейный шум». [135] Тем не менее, английский модуль предлагает как длинные, так и короткие варианты английского языка. В документе perlstyle говорится, что линейный шум в регулярных выражениях можно уменьшить с помощью /xмодификатора для добавления пробелов. [136]

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

См. Также [ править ]

  • Краткое описание Perl
  • Язык данных Perl
  • Объектная среда Perl
  • Обычная старая документация

Ссылки [ править ]

  1. ^ "Perl 5.32.1 теперь доступен!" . www.nntp.perl.org . Проверено 24 января 2021 года .
  2. ^ "Perl 5.30.3 уже доступен!" . www.nntp.perl.org . Проверено 2 июня 2020 года .
  3. ^ "Perl 5.33.6 теперь доступен!" . www.nntp.perl.org . Проверено 22 января 2021 года .
  4. ^ "Релизы · atoomic / perl" . GitHub . Проверено 5 февраля 2021 года .
  5. Sawyer X (24 июня 2020 г.). «Анонс Perl 7 - nntp.perl.org» . www.nntp.perl.org . Проверено 5 февраля 2021 года . Мы планируем выпустить 7.0.0 в течение года. Однако я ставлю цель выпустить его до конца этого года [2020].
  6. ^ a b "Художественная лицензия" - dev.perl.org " . dev.perl.org .
  7. ^ a b Artistic - файл в репозитории Perl 5 git
  8. ^ a b «Лицензирование Perl» . dev.perl.org . Проверено 8 января 2011 года .
  9. ^ Ларри Уолл. «Программирование - это сложно, давайте приступим к написанию сценариев ...» У всех языковых дизайнеров есть свои случайные особенности. Просто у меня это получается лучше, чем у большинства.
  10. ^ "О Perl" . perl.org . Проверено 20 апреля 2013 года . «Perl» - это семейство языков, «Perl 6» - это часть семейства, но это отдельный язык, у которого есть собственная команда разработчиков. Его существование не оказывает существенного влияния на дальнейшее развитие «Perl 5».
  11. ^ «Путь к Раку» . GitHub . Проверено 14 января 2021 года . В этом документе описываются шаги, которые необходимо предпринять для переименования Perl 6 в Raku.
  12. ^ Лэпворт, Лео. «Общие вопросы о Perl» . Perl FAQ . Perl.org . Проверено 24 февраля 2012 года .
  13. ^ "perl (1): Практический язык извлечения / отчетов - справочная страница Linux" . Linux.die.net . Проверено 23 июля 2013 года .
  14. Шеппард, Дуг (16 октября 2000 г.). «Введение в Perl для новичков» . dev.perl.org . Проверено 8 января 2011 года .
  15. ^ Эштон, Элейн (1999). «Хронология Perl и его культуры (v3.0_0505)» .
  16. ^ Schwartz, Randal L .; Кристиансен, Том / Предисловие By-Wall (1 июля 1997 г.). «Изучение PERL» . O'Reilly & Associates, Inc. - через dl.acm.org.[ постоянная мертвая ссылка ]
  17. ^ a b c d Уолл, Ларри , Том Кристиансен и Джон Орвант (июль 2000 г.). Программирование на Perl, третье издание . O'Reilly Media . ISBN 978-0-596-00027-1.CS1 maint: несколько имен: список авторов ( ссылка )
  18. ^ «Языковые оценки» . Самая сильная сторона Perl - это его чрезвычайно мощные встроенные средства для обработки текстовых, строчно-ориентированных форматов данных по шаблону; в этом он не имеет себе равных.
  19. ^ "Вы использовали Perl, чтобы написать ЧТО ?!" . 24 января 2008 г. Perl всегда использовался для решения любых задач, связанных с вводом по шаблону.
  20. ^ «Важность Perl» . Архивировано из оригинала 2 февраля 2015 года . Проверено 4 февраля 2015 года . Беспрецедентная способность Perl обрабатывать текст ...
  21. Перейти ↑ Smith, Roderick W. (21 июня 2002 г.). Продвинутая сеть Linux . Эддисон-Уэсли Профессионал. п. 594 . ISBN 978-0-201-77423-8.
  22. Шеппард, Дуг (16 октября 2000 г.). «Введение в Perl для новичков» . O'Reilly Media . Проверено 27 июля 2008 года .
  23. Рэймонд, Эрик (23 декабря 2003 г.). "Швейцарская армейская бензопила" . Файл жаргона . Проверено 29 ноября 2014 года .
  24. ^ Леонард, Эндрю. «Радость Perl» . Salon.com . Проверено 5 июня 2012 года .
  25. ^ "Как программы измеряются | Компьютерная языковая тестовая игра" . benchmarksgame-team.pages.debian.net . Проверено 5 октября, 2020 .
  26. ^ «RSA в 3-х строчках perl - Everything2.com» . all2.com . Проверено 5 октября, 2020 .
  27. Ларри Уолл (1 февраля 1988 г.). «v13i001: Perl,« замена »awk и sed, Part01 / 10» . Группа новостейcomp.sources.unix . Проверено 13 января 2011 года .
  28. ^ "Архив perl.perl5.porters" . perl.org . Проверено 13 января 2011 года .
  29. ^ "perlhist - записи истории Perl" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 21 января 2011 года .
  30. ^ "CPAN" . CPAN . Проверено 8 мая 2017 года .
  31. ^ a b "perl5004delta - что нового в perl5.004" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 8 января 2011 года .
  32. ^ Патвардхан, Натан; Сивер, Эллен; Spainhour, Стивен (2002). Perl в двух словах, второе издание . O'Reilly Media . ISBN 978-0-596-00241-1.
  33. ^ "perl5005delta - что нового в perl5.005" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 21 января 2011 года .
  34. ^ "perlhist - записи истории Perl" . www.cpan.org . Проверено 2 июня 2020 года .
  35. ^ "Perl Source" . www.cpan.org . Проверено 2 июня 2020 года .
  36. ^ "perl56delta - что нового в perl v5.6.0" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 21 января 2011 года .
  37. ^ "perl56delta - что нового в perl v5.6.x" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 21 января 2011 года .
  38. ^ Wall, Ларри. «Апокалипсис 1: Уродливое, плохое и хорошее» . Проверено 8 января 2011 года .
  39. ^ "perl58delta - что нового в perl v5.8.0" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 21 января 2011 года .
  40. ^ «План для мопсов» . O'Reilly Media . 3 марта 2005 . Проверено 27 января 2011 года .
  41. Тан, Одри (21 апреля 2010 г.). «Re: Как внедрить Perl 6 за десять лет» . PerlMonks . Проверено 3 января 2011 года .
  42. ^ "perl5100delta - что нового в perl 5.10.0" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 8 января 2011 года .
  43. ^ "perlsyn - синтаксис Perl" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 21 января 2011 года .
  44. ^ a b "perl5120delta - что нового в perl v5.12.0" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 8 января 2011 года .
  45. ^ "perldelta - что нового в perl v5.12.3" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 8 января 2011 года .
  46. ^ "perl5140delta - что нового в perl v5.14.0 - metacpan.org" . metacpan.org .
  47. ^ a b "perldelta - что нового в perl v5.16.0" . Документация по Perl 5 версии 16.0 . metacpan.org . Проверено 21 мая 2012 года .
  48. ^ "perl5180delta - что нового в perl v5.18.0 - язык программирования Perl" . Документация по Perl 5 версии 18.0 . metacpan.org . Проверено 27 октября 2013 года .
  49. ^ "perl5200delta - что нового в perl v5.20.0 - язык программирования Perl" . Документация по Perl 5 версии 20.0 . metacpan.org . Проверено 27 мая 2014 года .
  50. ^ Вехи в Perl Renaissance - Modern Perl Programming . Modernperlbooks.com. Проверено 17 июля 2013.
  51. ^ Предисловие (современный Perl 2011-2012) . Modernperlbooks.com. Проверено 17 июля 2013.
  52. ^ Современное издание Perl 2011-2012, хроматик | Оникс Неон Пресс . Onyxneon.com. Проверено 17 июля 2013.
  53. ^ "Просвещенный Perl" . Просвещенный Perl . Архивировано из оригинала на 5 февраля 2014 года . Проверено 28 сентября 2012 года .
  54. ^ "YAPC :: NA 2013 - 3-5 июня, Остин, Техас" . Yapcna.org. 4 июня 2013 г. Архивировано из оригинального 22 июня 2013 года . Проверено 11 апреля 2014 года .
  55. Little, Stevan (8 февраля 2013 г.). «Что такое Мо (разъяснение) | Стеван Литтл» . Blogs.perl.org . Проверено 11 апреля 2014 года .
  56. ^ "p2 на зелье" . Perl11.org. 7 февраля 2004 . Проверено 11 апреля 2014 года .
  57. ^ "goccy / gperl 路 GitHub" . Github.com . Проверено 11 апреля 2014 года .
  58. ^ "rperl" . RPerl.org . Проверено 11 августа 2014 года .
  59. ^ «Perl 7 анонсирован на конференции Perl в облаке» . perlfoundation.org. 24 июня 2020 . Проверено 24 июня 2020 года .
  60. ^ «Объявление Perl 7» . perl.com. 24 июня 2020 . Проверено 24 июня 2020 года .
  61. ^ «Подготовка к Perl 7d» . Leanpub.com. 24 июня 2020 . Проверено 24 июня 2020 года .
  62. ^ Джефф Бродвелл (8 августа 2005 г.), OSCON 4.4: Inside Ponie, мост от Perl 5 к Perl 6 , O'Reilly ONLamp Blog
  63. ^ Джесси Винсент (23 августа 2006), Ponie был поставлен на пастбище , The Perl Foundation, архивируются с оригинала на 27 июня 2009 года , извлекаться января 15, +2019
  64. Ричардсон, Марджори (1 мая 1999 г.). «Ларри Уолл, гуру Perl» . Linux Journal . Проверено 3 января 2011 года .
  65. ^ "perlfaq1: В чем разница между" perl "и" Perl "?" . perldoc.perl.org - документация по Perl 5 версии 12.2 .
  66. ^ Шварц, Рэндал ; Фой, Брайан ; Феникс, Том (16 июня 2011 г.). Изучение Perl . O'Reilly Media, Inc. стр. 4 . ISBN 978-1449313142. Perl иногда называют «Практическим языком извлечения и отчетов», хотя его также называют «Патологически эклектическим списком мусора» среди других расширений. На самом деле это бэкроним, а не аббревиатура, поскольку Ларри Уолл, создатель Perl, придумал название первым, а расширение - позже. Вот почему "Perl" не пишется заглавными буквами. Нет смысла утверждать, что расширение правильное: Ларри поддерживает и то, и другое.
  67. ^ Wall, Ларри . "perl - интерпретатор языка Perl" . Документация по Perl 5 версии 12.2 . Проверено 26 января 2011 года .
  68. ^ Wall, Ларри . «Re ^ 7: PERL как шибболет и сообщество Perl» . PerlMonks . Проверено 2 января 2011 года .
  69. ^ а б Шварц, Рэндал Л ; Феникс, Том; Фой, Брайан (6 декабря 2007 г.). Изучение Perl, третье издание . ISBN 978-0-596-00132-2.
  70. ^ a b «Информация об использовании и товарных знаках Perl Camel» . O'Reilly Media . Архивировано из оригинального 25 апреля 2018 года . Проверено 9 января 2011 года .
  71. ^ «Торговая марка Perl» . Фонд Perl . Архивировано из оригинала на 3 мая 2011 года . Проверено 9 января 2011 года .
  72. ^ Gillmore, Dan (25 октября 1998). "Республика Перл" . Чикаго Трибьюн . Проверено 10 января 2011 года .
  73. Ридель, Себастьян (18 января 2012 г.). «Perl 5 Raptor» . Себастьян Ридель . Проверено 12 ноября 2017 года .
  74. Траут, Мэтт (16 июня 2005 г.). «Состояние велоцираптора - вторая фаза» . Shadowcat Systems Limited . Проверено 12 ноября 2017 года .
  75. ^ "название неизвестно". 10 мая 1997 г. Usenet: [email protected] . [ мертвая ссылка ]
  76. Перейти ↑ Wall, Larry (1 марта 1997 г.). "Для чего искусство, ты?" . Linux Journal . Проверено 13 марта 2011 года .
  77. ^ "perlfunc - встроенные функции Perl" . Документация по Perl 5 версии 12.2 . perldoc.perl.org . Проверено 10 января 2011 года .
  78. ^ «Спецификация Perl 6» . Проект Perl 6 . Проверено 27 января 2011 года .
  79. ^ "Компиляторы Perl 6" . Проект Perl 6 . Проверено 27 января 2011 года .
  80. Перейти ↑ Gilmore, WJ (2010). Начиная с PHP и MySQL: от новичка до профессионала, четвертое издание . Апресс. п. 484 . ISBN 978-1-4302-3114-1.
  81. ^ "Служба поддержки IMDb: какое программное обеспечение / оборудование вы используете для работы сайта?" . База данных фильмов в Интернете . Проверено 12 февраля 2011 года .
  82. ^ DuckDuckGo обрабатывает большое количество поисковых запросов - 4,5 миллиона запросов в день. https://duckduckgo.com/traffic.html
  83. ^ DuckDuckGo использует Perl https://web.archive.org/web/20101231135106/http://www.gabrielweinberg.com/blog/2009/03/duck-duck-go-architecture.html
  84. ^ "Perl FAQ" . Perl довольно широко используется в Debian. На Perl написаны не только некоторые основные функции, но и более 700 пакетов в нестабильной версии, в названии которых есть perl (март 2004 г.).
  85. ^ "Perl Books - Книга: перенос данных с помощью Perl" . Perl.org . Проверено 30 декабря 2010 года .
  86. ^ Описание интерпретатора Perl 5 можно найти в Programming Perl , 3-е изд., Глава 18. См., В частности, стр. 467, где четко разграничиваются этапы выполнения и фазы компиляции от времени выполнения и времени компиляции . Perl «время» и «фаза» часто путают.
  87. ^ Шварц, Рэндал . «О разборе Perl» . Проверено 3 января 2007 года .
  88. ^ "Журнал Perl № 19 / 9.26" (PDF) . O'Reilly Media . Проверено 4 февраля 2011 года .
  89. ^ Кеннеди, Адам (2006). «PPI - разбор, анализ и управление Perl (без Perl)» . CPAN .
  90. ^ "Теорема Райса". Обзор Perl . 4 (3): 23–29. Лето 2008 г.и «Perl неразрешим». Обзор Perl . 5 : 7–11. Осень 2008 г., доступный в Интернете по адресу Кеглер, Джеффри. «Perl и неразрешимость» .
  91. ^ Hietaniemi, Яркко (1998). «Порты Perl (двоичные дистрибутивы)» . CPAN.org.
  92. ^ "Страницы MacPerl" . Бесплатное ПО Prime Time. 1997 г.
  93. ^ «Порты Perl (двоичные дистрибутивы)» . CPAN . Проверено 27 января 2011 года .
  94. ^ «ActivePerl - это Perl для Windows, Mac, Linux, AIX, HP-UX и Solaris» . Программное обеспечение ActiveState . Архивировано из оригинала на 31 марта 2016 года . Проверено 9 января 2011 года .
  95. ^ "Использование PPM" . Программное обеспечение ActiveState . Проверено 9 января 2011 года .
  96. ^ «Прощай PPM, Hello State Tool» . activestate.com . 23 июля 2019.
  97. ^ readme.txt
  98. ^ Декарт, Аллигатор; Банс, Тим (2000). Программирование Perl DBI: [программирование баз данных на Perl] (1-е изд.). Пекин [ua]: О'Рейли. ISBN 978-1-56592-699-8.
  99. ^ Бекман, Стас. «Эффективная работа с базами данных под mod_perl» . Проверено 1 сентября 2007 года .
  100. ^ "Class :: DBI - Простая абстракция базы данных - metacpan.org" . metacpan.org . Проверено 8 апреля 2020 года .
  101. ^ "Rose :: DB :: Object - Расширяемый, высокопроизводительный объектно-реляционный преобразователь (ORM). - metacpan.org" . metacpan.org . Проверено 8 апреля 2020 года .
  102. ^ «Алиот: игра для тестирования компьютерного языка: информация о проекте» . Алиот . Архивировано из оригинального 25 марта 2013 года . Проверено 13 января 2011 года .
  103. ^ "Какие программы самые быстрые?" . Игра "Тесты компьютерного языка" . Алиот . Архивировано из оригинала на 17 мая 2013 года . Проверено 13 января 2011 года .
  104. Лерой, Жан-Луи (1 декабря 2005 г.). «Своевременный старт» . О'Рейли.
  105. ^ Битти, Малькольм и Энак Адриан (2003). "Бэкэнд байт-кода компилятора B :: Bytecode Perl" . CPAN .
  106. ^ Ингерсон, Брайан. «Встроенный - metacpan.org» . CPAN . Архивировано из оригинального 13 июня 2013 года . Проверено 26 января 2011 года .
  107. ^ "Perl 5.12.0 выпущен - Обновление" . Heise Media UK. 13 апреля 2010 года Архивировано из оригинального 19 апреля 2010 года . Проверено 8 января 2011 года .
  108. ^ "Perl 5.16.1 выпущен!" . 9 августа 2012 . Проверено 26 августа 2012 года .
  109. ^ "Непреодолимый шлейф релизов Perl?" . LWN.net. 29 февраля 2012 . Проверено 28 марта 2012 года .
  110. ^ Индекс программного обеспечения TIOBE (2020). "Индекс сообщества программистов TIOBE Perl" . Проверено 6 февраля 2020 года .
  111. ^ "Perl 6" . Проект Perl 6 . Проверено 27 февраля 2011 года .
  112. ^ Торкингтон, Натан. «Транскрипция выступления Ларри» . nntp.perl.org . Проверено 25 января 2011 года .
  113. ^ "Официальная документация по Perl 6" . Проект Perl 6. Архивировано из оригинального 31 августа 2009 года . Проверено 25 января 2011 года .
  114. Кун, Брэдли (январь 2001 г.). «Соображения по переносу Perl на виртуальную машину Java» . Университет Цинциннати . Проверено 28 июня 2008 года . Cite journal requires |journal= (help)
  115. ^ "Сравнение характеристик компиляторов Perl 6" . Архивировано из оригинала на 11 августа 2017 года . Проверено 28 марта 2012 года .
  116. Уортингтон, Джонатан (15 июля 2013 г.). «Новости Rakudo JVM: больше тестов, а также прототипы потоков и обещаний» . 6гц . Проверено 24 июля 2013 года .
  117. Уортингтон, Джонатан (31 мая 2013 г.). «MoarVM: виртуальная машина для NQP и Rakudo» . 6гц . Проверено 24 июля 2013 года .
  118. ^ "переименовать-lwn" . Архивировано из оригинального 17 октября 2019 года . Проверено 10 ноября 2019 года .
  119. ^ "ракудо / ракудо - GitHub" . Github.com . Проверено 21 сентября 2013 года .
  120. ^ «Объявление Perl 7» . perl.com. 24 июня 2020 . Проверено 24 июня 2020 года .
  121. ^ «Perl 7 анонсирован на конференции Perl в облаке» . perlfoundation.org. 24 июня 2020 . Проверено 24 июня 2020 года .
  122. Перейти ↑ Wall, Larry (22 мая 2014 г.). «Культура Perl (также известная как первое состояние лука)» .
  123. ^ Ларри Уолл. «2-е состояние лука» . Проверено 12 октября 2012 года . (Искать "церковь")
  124. Рэндал Л. Шварц (2 мая 1999 г.). "Кто такой еще один хакер Perl?" . Группа новостейcomp.lang.perl.misc . Usenet: [email protected] . Проверено 5 декабря 2014 года . 
  125. Шварц, Рэндал (31 марта 2005 г.). «Каноническая ЯФА» . PerlMonks . Проверено 16 мая 2011 года .
  126. Грег Бэкон (28 мая 1999 г.). «Re: Увеличение значения в срезе» . Группа новостейcomp.lang.perl.misc . Usenet: [email protected] . Проверено 12 июля 2011 года . 
  127. Назад, Адам. «RSA в 5 строках perl» . Проверено 10 января 2011 года .
  128. ^ "Кодекс гольфа: Что такое Кодекс гольфа?" . 29 градусов. 2007. Архивировано из оригинального 13 января 2012 года . Проверено 26 ноября 2018 года .
  129. Перейти ↑ Gallo, Felix (2003). «Конкурс Zeroth Obfuscated Perl Contest» (PDF) . У Джона Орванта (ред.). Игры, развлечения и культура Perl: лучшее из журнала Perl . O'Reilly Media. Архивировано из оригинального (PDF) 22 ноября 2009 года . Проверено 12 января 2011 года .
  130. ^ "Perl Poetry" . PerlMonks . Проверено 27 января 2011 года .
  131. ^ Конвей, Дамиан. "Lingua :: Romana :: Perligata - Perl для XXI века" .
  132. Брокард, Леон (22 мая 2014 г.). "используйте Perl; журнал acme" . GrnLight.net. Архивировано из оригинального 22 мая 2014 года.
  133. ^ «Обновление для разработчиков». Обновление для разработчиков доктора Добба . Миллер-Фриман. 2 . 1995 г.
  134. ^ a b Шварц, Рэндал Л. (1993). Изучение Perl . O'Reilly & Associates. Bibcode : 1993lepe.book ..... S .
  135. ^ "perlintro" . Документация по Perl 5 версии 18.0 . Perl 5 Porters и perldoc.perl.org. Архивировано из оригинала 9 января 2011 года . Проверено 30 июня 2013 года .
  136. ^ "perlstyle" . Документация по Perl 5 версии 18.0 . Perl 5 Porters и perldoc.perl.org. Архивировано из оригинального 26 июня 2013 года . Проверено 30 июня 2013 года .
  137. ^ a b «Часто задаваемые вопросы по Perl 6» . Проект Perl 6 . Проверено 30 июня 2013 года .
  138. ^ a b хроматический (31 декабря 2012 г.). «Реализация Perl 5 по сравнению с Perl 6» . Проверено 30 июня 2013 года .

Дальнейшее чтение [ править ]

  • Изучение Perl 6-е издание (2011 г.), O'Reilly. Введение в Perl для начинающих.
  • Начиная с Perl 1st Edition (2012), Wrox. Учебное пособие для начинающих для тех, кто плохо знаком с программированием или просто не знаком с Perl.
  • Современный Perl 2-е издание (2012 г.), Onyx Neon. Описывает современные методы программирования на Perl.
  • Программирование Perl 4-е издание (2012 г.), O'Reilly. Исчерпывающий справочник по Perl.
  • Эффективное программирование на Perl, 2-е издание (2010 г.), Addison-Wesley. Руководство по написанию идиоматического Perl для среднего и продвинутого уровня.
  • Поваренная книга Perl , ISBN 0-596-00313-7 . Практические примеры программирования на Perl. 
  • Доминус, Марк Джейсон (2005). Perl высшего порядка . Морган Кауфманн. ISBN 978-1-55860-701-9. Приемы функционального программирования на Perl.

Внешние ссылки [ править ]

  • Официальный веб-сайт