V tom pripade bych se zeptal ja, jestli by sem nekdo nemoh vyklopit svoje PERLovy bookmarky - od A do Z. ;) Pres google se da najit hodne, ale to je mozna ten problem, zajimaly by me (a tusim, ze nejsem sam) spise ty hodnotnejsi linky, do kterych se vyplati investovat cas, dekuji.
Investoval bych cas do te vyse zminene knizky od P. Satrapy. Je to od A, ale jestli do Z, to je asi trochu individualni.
Kdyz jsem ji cetl, nevedel jsem o programovani nic. Perl byl muj prvni jazyk. A slo to docela hezky.
Rekl bych, ze je zhruba ekvivalentni s "Learning Perl" od O'Reilly.
Do knížky od pana Satrapy bych rozhodně neinvestoval (doma jí mám). Kniha od pana Satrapy má jednu hlavní nevýhodu, až přílišně se zaobírá syntaxí jazyka a málo již reálným použitím Perlu.
Mnohem lepší učebnicí je Perl za 21 dní z vidavatelství Sams (u nás Cpress). Z této učebnice vyleze (vlastní zkušenost) z lamy perlový profesionál. Narozdíl od knihy Perl pro zelenáče je v této knize vše vysvětleno podrobněji a řekl bych, že i lépe. Navíc kniha se zaměřuje i hodně na praxi a po jejím přečtení si dovolím tvrdit Perl pochopí do hloubky opravdu každý.
Já jsem samozřejmě prudce neobjektivní, ale řekl bych, že mi Martin Koníček docela křivdí. Rozhodně si nemyslím, že moje knížka je hlavně o syntaxi. Naopak hloubku jsem u knihy Perl za 21 dní dost postrádal (abychom si rozuměli - hloubka jsou u mě principy, jak věci fungují, nikoli výčet všech funkcí či parametrů).
Dovolil bych si doporučit případným zájemcům o některou z těchto knih, aby se do nich pokud možno v knihkupectví podívali a zkusili si přečíst kousek textu věnovaný stejnému tématu. Nemám z takového srovnání obavy ;-)
Root:
Nebojte se velblouda: http://www.root.cz/clanek/506
Perličky: http://www.root.cz/clanek/942
http://www.root.cz/clanek/964
http://www.root.cz/clanek/1061
http://www.root.cz/clanek/1366
http://www.root.cz/clanek/1386
Zbytek světa:
http://www.perldoc.com/perl5.8.0/pod/perlintro.html+ odkazy odtamtud -- hypertextová verze `man perlintro` (anglicky)
Prověření nejasností:
>perl [-w] -e'<sporný kód>'
Jednoduchá kalkulačka (s možností používat proměnné, ba i definovat jednořádkové funkce):
>perl [-w] -e'while (<STDIN>) {print eval($_), "\n";}'
nebo trochu úhledněji:
>perl -w -e'print "Simple Perl calculator:\n>>> "; while (<STDIN>) {print eval($_), "\n>>> ";}'
Ukázka, proč je jako kalkulátor praktičtější Python a proč by i programátor v Perlu měl myslet na to, jakého typu budou jeho proměnné:
>perl -w -e'print "Simple Perl calculator:\n>>> "; while (<STDIN>) {print eval($_), "\n>>> ";}'
Simple Perl calculator:
>>> sub f {my $n=shift; if ($n<1) {1;} else {$n*f($n-1);}
>>> f(0)
1
>>> f(2)
2
>>> f(3)
6
>>> f(20)
2432902008176640000
>>> f(21)
5.10909421717094e+19
>>> <Ctrl D>
Perl zkonvertoval přesné celé číslo na nepřesné reálné, a dokonce ani s volbou -w vůbec nevaroval. Legrace přestává ve chvíli, kdy si zkusíte pomocí Perlu jen tak v řádce spočítat kontrolní součet pro mezinárorní formát čísla bankovního účtu. Python v podobné situaci zkonvertuje obyčejné celé číslo na dlouhé celé číslo s neomezenou délkou.
A na závěr jeden pedagogický příklad (když už jsem tu blbost udělal, ať z ní taky někdo něco má):
>perl -w -e'print "Simple Perl calculator:\n>>> "; while (<STDIN>) {print eval($_), "\n>>> ";}'
Simple Perl calculator:
>>> sub f {$n=shift; if ($n<1) {1;} else {$n*f($n-1);}
>>> f(0)
0
>>> f(1)
0
>>> f(10)
0
>>> <Ctrl D>
Přiřazovat $n=shift; globální proměnné ve vnořené rekurzivní funkci opravdu nebyl dobrý nápad.
Díky za rozšíření obzorů. bigint (a bignum a bigrat -- až mi příště bude něco v Perlu scházet, snad nezapomenu prohledat CPAN) se mi určitě někdy bude hodit (například výpočet kontrolního součtu pro IBAN řeší elegantněji než dělení po kouskách).
Bohužel pro Perl coby příruční kalkulátor mi tyhle moduly zas tak užitečné nejsou, protože mi s nimi (v Perlu 5.8.0, alpha-dec_osf) záhadně přestává fungovat eval.