„I když se vám nejkrásněji zdá, že jste strojvůdci své lokomotivy, výhybku vám vždycky přehodí někdo jiný, kdo toho umí míň.“ Ludvík Vaculík (Morčata)
maskot zápisníku

Chybějící Kousek Zápisník Antonína Daňka

Open Source, programování, internet,

kurzor

Upozornění na nový obsah pomocí RSS.

? Co je to RSS?

Upozornění na nový obsah pomocí e-mailu.


perl.jpg

/usr/bin/perl

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.

datum 04.07 /2007 - 14:36 tag programování komentář 7 komentářů (přečteno: 3694x)

Související články:

Feedburner

GEOrss, už ho máš?

WebExpo 2009

Nenechte si ujít

Nejčtenější články za poslední půlrok.

Nejkomentovanější články za poslední půlrok.

Nejčastěji komentující čtenáři za poslední půlrok.

Nejkvalitnější komentář

leviathan

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


Zaujal vás tento článek? Nezapomeňte, že je ve vaší moci ukázat stovkám dalších lidí, že tento článek se vám libí. Stačí kliknout na následující tlačítko. pridej.cz

Chcete být upozorňován(a) na nové texty? Pak si přidejte do své RSS čtečky zdroj pro články, bleskovy nebo komentáře a buďte tak informování o všem novém.

Neváhejte napsat k článku komentář (Co je to komentář ?), pokud máte k danému tématu co říci.

check


check



icon_smile.gif icon_sad.gif icon_biggrin.gif icon_confused.gif icon_cool.gif icon_twisted.gif icon_wink.gif icon_cry.gif icon_eek.gif icon_evil.gif icon_exclaim.gif icon_frown.gif icon_cheesygrin.gif icon_idea.gif icon_lol.gif icon_mad.gif icon_mrgreen.gif icon_neutral.gif icon_question.gif icon_razz.gif icon_redface.gif icon_rolleyes.gif icon_surprised.gif icon_arrow.gif icon_arrowd.gif icon_arrowl.gif icon_arrowu.gif


Prosím odpovězte na následující otázku (do formuláře zadejte pouze písmeno).

Jakou z následujících věcí by si vybral robot?
a) štěně b) kytičku od svého milého c) pečlivě naformátovaný soubor

Nápověda: Zkuste možnost c (ale uznám vám i b).


check


1

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.

odpovědět

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

rony

04.07 /2007 - 15:18

rony<zavináč>mailinatortečkacom

brak | průměr | kvalitní názor


2

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

odpovědět

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

leviathan

04.07 /2007 - 16:34

michaelf.ms<zavináč>gmailtečkacom

brak | průměr | kvalitní názor


3

>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

odpovědět

  • 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
Gravatar

Antonín Daněk

04.07 /2007 - 17:22

danek<zavináč>antonindanektečkacz

brak | průměr | kvalitní názor


4

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.

odpovědět

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

sh

05.07 /2007 - 16:34

sh<zavináč>isecuretečkacz

brak | průměr | kvalitní názor


5

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/in...log#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."

odpovědět

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

Antonín Daněk

06.07 /2007 - 22:02

danek<zavináč>antonindanektečkacz

brak | průměr | kvalitní názor


6

Zkus Ruby, mohlo by se libit;)

odpovědět

Gravatar

jan

07.07 /2007 - 15:01


brak | průměr | kvalitní názor


7

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...

odpovědět

Gravatar

kane77

10.07 /2007 - 20:56

martinhrvn<zavináč>gmailtečkacom

brak | průměr | kvalitní názor


Navrženo pro přenos v binární soustavě | Kdo stojí za tímto blogem? | © Antonín Daněk | Autorské dílo

TOPlist