Včera jsem si přečetl několik stránek (v knize Open Source vývoj webových aplikací) o jazyce Perl. Původně jsem ho chtěl úplně přeskočit, ale přecijen, v UNIXu se to může hodit.

Neuvěřitelný bastl

Že je PHP bastlo jazyk ? Možná, ale nevím jak bych pak označil Perl. Syntaktická pravidla jsou opravdu velice ... „zajímavá". Není se čemu divit, tento jazyk vzniknul původně jen pro účely zpracování textu, nicméně teď už zvládá i objekty. Je velkým zastáncem TMTOWTDI.

Chyba v časoprostoru ?

Asi, protože mi nejde do hlavy, jak tohle může nějaký interpret (resp. kompilátor, Perl je něco mezi tím) přeložit.

Kromě klasické podmínky if je tu také unless. Kromě cyklů for a while navíc until. Co je ale opravdu šílenost jsou tzv. modifikátory výrazů. Totiž toto:

if($hlad) { jíst(); }

Je to samé jako:

jíst() if $hlad;

To ale není všechno, krom toho tu je zkrácené vyhodnocování pomocí logických operátorů. Nemusíte pak prakticky vůbec používat podmínky.

if($hlad) { jíst(); }

Lze napsat takto:

$hlad && jist();

Funguje to na základě pravidel pro logické operátory. Totiž pokud je nějaký operand u logického násobení nepravdivý, je jasné že výsledek bude nepravdivý nezávisle na hodnotách dalších operandů. Perl se tímto řídí a proto už další kód nevykonává, protože by to bylo zbytečné. Proto výraz1 && výraz2 funguje jako podmínka. Pokud je $hlad logická nula, už neprovede funkci jist();

Takových zvláštností je v Perlu spoustu. Například jestliže vytvoříme pole @pole, pak je poslední index uložen v proměnné $#pole.
Asociativní pole (s nečíselnými indexy) se označuje zase jinak - %pole.
** je operátor mocniny.
$a = 'ahoj'; print "$a x 2"; vytiskne ahojahoj.
Jsou tu operátory na porovnávání řetězců, které vrací kromě logické 0 a 1 také (že by nelogickou ? ) -1.

Mohl bych pokračovat ještě hodně dlouho ...

Ono je to sice všechno logicky odvoditelné, ale dovedete si představit rozsáhlejší kód, který využívá všech těchhle fičurek ? Nevím kolik času by zabralo jeho zpětné pochopení.

Proč to píšu ?

Vzpomněl jsem si totiž na programování v C s panem Štěrbíkem (na škole jejíž třetí ročník jsem letos dokončil).

Slíbil nám, že přinese na ukázku nějaký velice těžce čitelný kód. Nakonec se na to zapomnělo, ale já jsem zjistil, že v Perlu se v tom dokonce dělají soutěže. Jmenuje se to Obfuscated Perl Coding Contest. Můžete si přečíst např. článek na Wikipedii. Zajímavější jsou (převzato z externích odkazu Wikipedie) samotné vítězné práce. Zde je první a druhé místo.

7 komentářů

Neváhejte napsat k článku komentář

Nevyplňujte:

  1. 1
    rony

    rony<zavináč>mailinatortečkacom

    priblizne chapem, co chces napisat. Niekto tvrdi, ze PHP je bordelsyntax jazyk a potrebujes naznacit, ze aj Perl ma podobne problemy.

    Je tu jeden zasadnejsi problem. V subjektivnej averzii a sympatii k jednemu z nich.

    Ale aj v tomto:

    tebou uvadzane priklady nekladu na teba narok osvojit si vsetky mozne formy zapisu (syntaxe) tej istej poziadavky (funkcie).

    naproti tomu u PHP sa bohuzial musis nejakym sposobom naucit NAZVY funkcii pre kazdy co i len slabsi odtien poziadavky. Cize postupne pribudaju dalsie a dalsie funkcie a tak sa stane, ze pre puhy vyber casti retazca mas niekolko ak nie aj niekolko desiatok rozne fungujucich funkcii, ktore sa lisia nielen logikou nazvoslovia (nahodne pouzitie podtrzitok, skratiek) ale aj rozne poprehadzanom poradi parametrov.

    Nechcem tym robit protiutok, v principe mi je to jedno pokial existuje silny vyhladavac v style "nejako opisem co chcem urobit a ono mi to vypluje zoznam funkcii, ktore by to mohli byt a ja si z nich vyberiem najvhodnejsiu, odskusam a pripadne po par pokusoch zistim, ktora funguje tak ako chcem).

    V syntaxi perlu mozes teda pouzit zapis, ktory ti subjektivne vyhovie viacej a vykaslat sa na ine varianty toho isteho.

    K tomu spracovaniu textu ako ucelu Perlu: je to pravda. Hodnotisko totiz velmi jednoucelovo a to ako webovy skriptovaci jazyk. Zcasti mozem tvrdit, ze drviva vacsina webovych skriptov pracuje s textovymi informaciami rozneho druhu, takze jeho pouzitie je teda viac nez pochopitelne prave v jeho aplikacii ako weboveho skriptovacieho jazyka.

    Sam ho koniec koncov pouzivam ako jadro systemu, ktory spaja sablonu vzhladu webu s textovym obsahom pricom v potrebnej miere textove podklady spracuvam prave s vyhodami perlu.

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #3
  2. 2
    leviathan

    michaelf.ms<zavináč>gmailtečkacom

    protože se programování věnuji déle, neodpustím si pár připomínek:

    1) add "jíst() if $hlad;":
    mě to přijde krásný, ukazuje to akorát na chytrej interpreter. viz třeba do while, while do, kde do nemusí nutně být že?
    2) add "**"
    ** je standardní a naprosto běžný operátor mocniny, který se používá jak symbolicky, tak v programování
    3) add "0 a 1 také (že by nelogickou ? ) -1"
    to je také věc naprosto běžná a hojně využívaná, překvapuje mě, že to neznáš. používá se například ve Visual Basicu - je to typ TRISTATE a nabývá hodnot False, True a Default.
    4) add "$a = 'ahoj'; print "$a x 2""
    to je opravdu hnusný :)

    icon_question.gificon_arrowd.gificon_question.gif
    icon_arrow.gificon_mrgreen.gificon_arrowl.gif
    icon_question.gificon_arrowu.gificon_question.gif

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #3
  3. 3
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    >Rony: Máš pravdu, že PHP mam rád, ale i když jsem tenhle článek napsal poněkud agresivně, tak Perl se mi taky libí. Už jen proto, že se dá použít i mimo web.

    Přeházení parametrů ? Na to si tušim stěžoval Hulán. icon_smile.gif Otázka zní, jestli je horší tu funkci vůbec nemít k dispozici nebo ji mít divně pojmenovanou či s nelogickým pořadím parametrů. Ostatně stejně tak jako v Perlu tak v PHP nám nikdo nebrání si ty funkce napsat sám, jen ze základních klíčových slov.

    Perl jsem zkoušel jenom v konzoli Ubuntu.

    >Leviathan: Díky za info.
    Překvapuje mě, že tě to překvapuje, icon_smile.gif já se Visual Basic neučil.
    BTW: Pekněj smajlobrázek, ukazuješ mi netušený možnosti tohodle blogu. icon_lol.gif

    • Tento komentář je reakcí na příspěvek #1, který napsal(a) rony
    • Tento komentář je reakcí na příspěvek #2, který napsal(a) leviathan
  4. 4
    sh

    sh<zavináč>isecuretečkacz

    Ani bych neřekl že bastl, spíš bych řekl že má programátor lepší možnost si zvolit svůj nejefektivnější coding style :) Mimoto spoustě nehorázných prasáren se nechá vyhnout už jenom "use strict;"...

    Jinak ohledně větších projektů, nic většího bych v tom asi nepsal, stejně tak ani v php... ale právě na automatizaci je naprosto nepřekonatelnej ať už díky supr práci s i/o nebo nativním regexpům i díky modulům naprosto na všechno. Navic od php ma alespoň trošku funkční vlákna...

    Na web bych ho necpal, ale na takovýty konzolový skriptíky a různý botky no.1.

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #5
  5. 5
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    Jasně, jak jsem řekl, proto jsem se na Perl chtěl podívat. Beru ho jako pomocnej jazyk do Unixů, kterej mi může ušetřit hodně času.
    Jinak se právě dívám na přednášku zakladatele Seznamu Iva Lukačoviče, kterou doporučil Scotty ( http://blog.antonindanek.cz...e-blog#2 ) a tam Ivo řekl tohle: „Muj nejoblíbenější programovací jazyk byl Perl. Já nevim jestli tady někdo z vás zná Perl. To je takový prasojazyk. V tom jazyce dokážete napsat nějaký program aniž byste použili jediný lexikální symbol."

    • Tento komentář je reakcí na příspěvek #4, který napsal(a) sh
  6. 6
    jan

    Zkus Ruby, mohlo by se libit;)

  7. 7
    kane77

    martinhrvn<zavináč>gmailtečkacom

    sutaze v Obfuscated kode sa robia aj v c-cku - (http://en.wikipedia.org/wiki/The_International_Obfuscated_C_Code_Contest)... ja som tento rok zacal s ruby, co je jazyk dost podobny (hlavne vo veciach ktore si tu vyzdvihol) a nezda sa mi menej prehladny..
    pri jednoduchych statementoch mi prijde logickejsie pisat if za vyraz...
    to ze porovnavanie retazcov vracia aj zaporne cislo je logicke - vacsi, rovnaky, mensi...
    to ako sa ktore pole oznacuje je mozno pociatocne ohurenie, ale po case prestane byt zvlastne..
    perl ako aj ruby sa mi zdaju velmi pekne jazyky, su sice spociatku zvlastne ale potom to vsetko zacne davat zmysel...