Perl úspěšně používám v mnoha různých projektech. Je to velmi užitečný jazyk a na některé úlohy ideální nástroj. Dokáže být expresivní a elegantní, ale lze se v něm vyjadřovat i minimalisticky a polopaticky, pokud je to vhodné. Používám i jiné jazyky, ale Perl mi pořád vyhovuje asi nejvíc. Co mám rád? Skalární typ, vestavěné regulární výrazy, dostupnost na všech unixových systémech, CPAN, strict, Mojolicious..
> Co mám rád? Skalární typ
To myslite vazne?
$var muze byt string, char, int, float, oct, hex...
ale
@var je array
%var je hash
ale (pro array):
$var[0] je nulty element (proc $?; protoze scalar...)
ale:
@var[0..3] je slice nulteho az <3 elementu (protoze vysledkem je preci jine pole)
pricemz:
$varar1 = \@var udela kopii adresy pole (je to preci jasne ze se jedna o scalarni reprezentaci). Btw, ten slash tam musi byt
@varar2 = @var udela kopii samotneho pole
a na zaver pro vsechny co neznaji perl ale programovat umi, zda bez napovedy pochopi co delaji tyto dve radky:
scalar (@var)
x ~~ @var
To jsem si namatkou vzpomel na par veci.
Ja se radsi vratim k pythonu a budu mit klid. Perliste na mne mohou plivat dal :)
Ano, způsob jakým se používají skalární hodnoty v Perlu mi vyhovuje. Že to může být pro člověka, zvyklého na jiný jazyk, divné, na tom nic nemění. Ale uznávám, že např. vyjádření složitějších datových struktur pomocí referencí je něco, co nemusí být zrovna oku lahodící.
Neintuitivní věci jsou ale i v Pythonu, z hlavy mě napadá třeba:
print (3/2) # jaký je výsledek? to záleží na verzi..
for i in range(1, 5): print(i) # kolik programátorů (bez zkušenosti s Pythonem) uhodne výsledek?
A to nejdůležitější: Nikdo (nebo aspoň já ne) na vás neplive. Kdybych nepoužíval Perl, pravděpodobně bych pro řešení svých úloh používal právě Python nebo jiný rozšířený jazyk vydaný pod otevřenou licencí. Jsme na jedné lodi.
Pokud bych chtel neco skutecne Pythonu vycitat, je to nekonzistence psani identifikatoru ve standardni knihovne (snake case vs. camel case atd.). Jinak je nacase si rict, ze Python 2 je minulost. V distribucich uz dvojka jako default mizi, po roce 2020 bude snad vse definitivne jasne i poslednim staromilcum. Tudiz 3/2 je uz navzdy 1.5. Vhodnost a intuitivnost semantiky veci typu range() se muze resit az do konce veku. Srovnavat to s perlimi referencemi mi ale prijde dost prehnane.
"Tudiz 3/2 je uz navzdy 1.5."
Python neznám. Co v Python znamená "navzdy"? :-)
Opět předesílám, že Python neznám a proto odcituji z Wikipedie:
V současné době (2018) se používají dvě nekompatibilní verze Pythonu 2.x a 3.x. Python 3.x byl vydán v roce 2008 a odstraňuje řadu nedostatků a chybných návrhů jazyka, které nešlo odstranit bez narušení kompatibility.
Python 3.x přišel tedy v roce 2008 a zdá se mi tak zřejmé, že kód starý 20 let bude asi často nefunkční na Python 3.x.
Nechci vyvolávat nevraživost, ale nelíbí se mi některé posměšky na Perl 5 a náznaky, že Perl 5 je v užívání a programování mrtvý.
Pletes dohromady IMO nekolik veci:
Python 2/3 a Perl 5/6. Python 2 je nahrazen trojkou a v roce 2020 konci uplne. Programatori v Perlu se rozhodli, ze "plati" obe verze. Ano, legacy produkty v Pythonu budou mit problem a migrace nemusi byt bezbolestna. Ale nikdo pricetny nedoporucuje pouzivat na nove veci dvojku. Proc se perlisti nedohodli na zavrzeni petky nebo naopak neprejmenovali sestku na neco jineho, to nechapu. Java se meni, C++ se meni, dokonce i C se meni. Perl 5 je zakonzervovany, fakt nevim, proc ho ucit nekoho noveho, kdyz uz je sestka, ale necham se poucit.
Zmena je mozna vzdycky, ale nevim nic o tom, ze by se v Pythonu menila semantika operatoru nebo neco podobneho tam a zase zpet.
Operator // (floor division) byl do Pythonu pridany v roce 2002 (verze 2.2) a vychazi z PEP 238 (z roku 2001). Uz tenkrat vyvojari Pythonu mysleli na tuhle zmenu, ale opravdove preklopeni prislo az v te verzi 3.
Nemyslím si, že "Python 2/3" je to samé co "Perl 5/6". Rozhodně tedy ne na časové ose... Někoho baví kompletně přepisovat programy každých pár let - to mne nebaví a rád si takovou periodu prodloužím.
"Perl 5 je zakonzervovany" - jeho zakonzervovanost není stoprocentní, ale asi tu panuje mezi námi shoda. V čem není shoda je, že ty považuješ tu zakonzervovanost za něco špatného (respektive mrtvého pro nový vývoj - stavbu programů) a já to v tomto případě (Perl 5) považuji za velmi přínosné. Například je to velmi přínosné pro stavbu programů, které se staví a udržují velmi dlouho.
Vše co píšete je intuitivní. Sigily mají celou řadu výhod a pracuje se s nimi dobře, ne jako v shellu, kde na jedné straně být musí a na druhé nesmí, ne jako v PHP, kde není na první pohled jasné, co je pole, skalár nedejbože asoc. pole. Také nevím, jak byste jinak chtěl udělat referenci, občas je potřeba a zpětné lomítko se k tomu hodí. Perl není jazyk, kde by se defaultně pracovalo s referencemi (ať už při předávání "parametrem" nebo jen u kopírování). - Pokud přinutíte pole, aby bylo skalárem, co asi tak můžete dostat? Při krátké úvaze vás napadne: první prvek, poslední prvek nebo velikost pole. Po další úvaze vás pak možná napadne, že ta velikost je přecejen logičtější i častěji potřeba, ale nemusíte to dělat tímto způsobem. Operátor ~~ je tzv. 'smart operator' a už podle názvu bude asi dobré si prostudovat, co všechno se s ním nechá dělat, já jej třeba nikdy nepoužil. Takže, pokud vám nesedí, co jste uvedl, pak to asi není jazyk pro vás. Jsou tam i vyšší levely -- třeba už jenom rozdíl pole vs. seznam.
Já jsem se až na Perlu dokázal doučit všechno to, co nám na vejšce nikdo nevysvětlil. A jak to nyní sleduji, tak bych nejraději ten Perl zavedl jako první povinnej předmět na promrskání základních algoritmů, pochopení toho jak se pracuje s bufferem, rozdíl mezi načítání ze stdin a řádkového vstupu a sceneru, rozdíl mezi předávání hodnotou a referencí a řadu dalších triviálních věcí, které jsou v céčku na procvičení zbytečně složité a v objektové javě už někde úplně jinde.
Uplne rozumim tomu, ze nekdo pouziva Perl proto, ze je nekde dostupny a dobre v nem umi. Rozumim tomu, ze si v tom nekdo dela skripty pro sebe a rozumim, ze se udrzuji legacy systemy, ktere nikdo nema prostredky prevest do jineho jazyka.
Nerozumim tomu, proc ucit Perl dalsiho cloveka a lakat ho na skoleni. Pokud se tedy nechce venovat sprave legacy software. Neresim ted Perl 6, to by bylo na jiny flame, ale predpokladam ze nabizene skoleni se zabyva petkou.