Perl

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Perl (výslovnost [purl] či ) je interpretovaný programovací jazyk vytvořený Larry Wallem v roce 1987. S rozvojem internetu se Perl stal velmi populárním nástrojem pro tvorbu CGI skriptů.

Perl zahájil svou éru jako skriptovací jazyk, náhrada jazyka AWK a interpretru sh. Největšího rozšíření dosáhl ve verzi 4 z roku 1991. +more Verze 5 přinesla četná vylepšení, především výkonné datové struktury a možnost objektového programování. V poslední době získal Perl oblibu mimo jiné v bioinformatice. PC Magazine zařadil Perl v roce 1998 mezi finalisty soutěže Technical Excellence Award v kategorii Development Tool. Slovo Perl najdete v Oxford English Dictionary.

Larry Wall se při konstrukci jazyka řídil heslem „dá se to udělat více způsoby“ . Umožňuje psát krátké programy jednoduše a rychle a přitom nebrání v psaní těch složitých. +more Jeden ze způsobů je přitom obvykle velmi stručný, takže Perl získal nezaslouženou pověst jazyka, ve kterém se tvoří nesrozumitelný a neudržovatelný kód. Tato kritika ale není oprávněná, Perl je vhodný k řešení malých i velkých problémů. Schopnosti a nástroje, které se používají u velkých projektů, lze použít i v krátkých skriptech.

Dobrý programátor má podle Larryho Walla být líný, netrpělivý a sebevědomý (Laziness, Impatience and Hubris).

Výhody Perlu

výhody „interpretovaného“ jazyka, především rychlý vývoj bez nutnosti [url= Server|Apache]url= Server|Apache][Překladač|kompilace]] a linkování - program je zkompilován po každém spuštění a je kdykoli možné „přikompilovat“ další kód. Je možno i provést část kódu před kompilací zbytku a nastavit tak konstanty, které následně může využít optimalizační část kompilace. +more A například vynechat kód pro ladicí výpisy, pokud není program spuštěn s určitým parametrem. * přes 18 000 volně dostupných modulů třetích stran v Comprehensive Perl Archive Network CPAN. Pojmenování, kategorizace, dokumentace, testování a instalace modulů jsou standardizovány. Moduly zpřístupňují prakticky veškerá dostupná rozhraní a knihovny. * efektivita programování - v programech, které nejsou přímo závislé na rychlosti běhu, je výhodnější jazyk, který vyžaduje méně řádek kódu * automatická práce s pamětí (není třeba explicitně alokovat a uvolňovat paměť) a pokročilé datové typy např. asociativní pole neboli hash (lineární seznamy a binární stromy již nejsou třeba) * Perl je svobodný software, licencován pod Artistic License nebo GNU General Public License * ve srovnání s kompilovanými jazyky lepší možnosti zabezpečení při běhu kódu * snadné spojování již hotových komponent (modulů) stejně jako u Delphi, Visual Basicu, PowerBuilderu, Tcl, Microsoft Office, Emacs, atd. a navíc s možností širokého použití (Linux, Unix, MS Windows, VMS, Palm OS, [[Apache[/url]], ASP, CGI, ISAPI, OLE, WSH, WSC, wxPerl, atd. ) * převzetí osvědčených konstrukcí z ostatních jazyků, jako např. C, AWK, sed, sh, BASIC, funkcionální jazyky (uzávěry, funkce jako parametry nebo návratové hodnoty, …) a dalších * reference na statické, dynamické i anonymní datové struktury * umožňuje procedurální, funkcionální i objektově orientované programování * snadná práce s textem a značkovacími jazyky (XML, HTML…) * regulární výrazy a jejich rychlost * Perl podporuje znakovou sadu Unicode a je (byl) Y2K kompatibilní * eval (možnost využít funkce překladače za běhu programu, takže můžeme vytvářet dynamický kód, resp. kód optimalizovat na rychlost za běhu) * dynamické volání procedur (název známe až za běhu programu) * stabilita - mnoho let vyvíjený programovací jazyk * možnost použití inline C/C++ v Perlu nebo rozhraní Perlu pro externí C/C++ knihovny skrz XS nebo SWIG * uzávěry (podprogramy si pamatují proměnné, jež potřebují ke svému běhu) * návěstí (řízení cyklů) * automatické zavádění (pokud jméno funkce neexistuje, pak Perl umožňuje spuštění definovaného kódu) * mod perl umožňuje web serveru [[Apache[/url]] vložení Perlu s výhodami, jako je při vložení PHP * interpret Perlu může být vložen (embedded) do ostatních systémů, #include * rozsáhlá dokumentace a literatura, komunita kolem Perlu, konference, news….

Nevýhody Perlu

nedisciplinovaný programátor může extrémně snadno vytvářet nesrozumitelný kód (jazyk velice benevolentní) * při některých aplikacích se může projevit neefektivnost dynamicky typovaného jazyka ve srovnání se staticky typovanými jazyky, zejména spotřeba paměti * kruhové odkazy a problematika jejich destrukce (použití reference counting garbage collectoru vyžaduje použití destruktorů, které přeruší kruh nebo používání weak [wiːk] referencí, které nezvyšují hodnotu čítače referencí) * mnozí tvrdí, že jde o jazyk nevhodný pro výuku programování, ostatním use strict;. Při použití ve výuce hrozí, že si student zvykne, že se o spoustu věcí nemusí starat a přechod na nižší jazyk pak bolí * syntaxe perlu 5 je tak složitá, že neexistuje samostatný parser ani formální definice syntaxe jazyka; jediný parser perlu řady 5 je samotný interpret perlu, ani programátorské editory Vim a Emacs neumí pro perl korektně zvýrazňovat syntaxi * jazyk obsahuje funkce typu typemap, která dovoluje provést kód stejně jako funkce eval

Budoucí vývoj (Perl 6 a VM Parrot)

V červenci roku 2000, hned po setkání, na kterém byl odstartován projekt vývoje jazyka Perl 6, byla započata práce na návrhu virtuálního stroje (VM - Virtual Machine) s názvem [url=http://www. parrot. +moreorg]Parrot[/url]. Parrot je určen pro efektivní běh dynamických programovacích jazyků (primárně pro Perl 6). Jádro nové verze jazyka Perl tak bude kompletně přepsáno jako tomu bylo např. u projektu Mozilla. Také syntaxe jazyka se dosti zásadně změní a úplná zpětná kompatibilita bude zaručena jinými prostředky.

Ukázka kódu

Tradiční program „Hello world“:

print "hello, world!\n";

Rozšířená verze tradičního programu:

# A sample Perl program $_ = "Hello, world! The magic number is 234542354.\n"; print; s/\d+/-1/; print;

a její výstup:

Hello, world! The magic number is 234542354. Hello, world! The magic number is -1.

Vysvětlení: print; v podstatě znamená print $_;, kde $_ je výchozí proměnná. s/\d+/-1/; (nebo také $_ =~ s/\d+/-1/;) je regulární výraz, jenž nahradí první nalezenou sekvenci číslic (celé číslo) číslem −1.

Perl je dynamický programovací jazyk. Je možné používat kompilátor v samotném programu. Tady je příklad kalkulačky v jednom řádku kódu:

while (1) { print eval ; }

Lze pak zadat například:

5*5 $a = $b = 1; $a+$b for (1..1_000) { print +($a+$b+$_)."\n"; } sin($a)**0.5

Složitější ukázkou je funkce, která vypíše Fibonacciho posloupnost:

fib(100);

sub fib { my ($a, $b) = (0, 1); while ($b

Výstupem tohoto programu by bylo:

1 1 2 3 5 8 13 21 34 55 89

Perl do verze 5. 20 (květen 2014) neumožňoval tradiční způsob předání parametrů funkci. +more Hodnoty předávané při volání funkce jsou uloženy v poli @_ a programátor si musel sám zkontrolovat kolik a jakých parametrů funkce dostala a uložit si je do lokálních proměnných. Samozřejmě existují knihovny, s jejichž pomocí je možné nadeklarovat validaci, výchozí hodnoty a podobně.

Práce s proměnnými je v Perlu poněkud odlišná od kompilovaných jazyků (C/C++, Pascal):

$prom; # skalární proměnná @prom; # pole %prom; # asociativní pole

$pozdrav = "Ahoj"; # skalární proměnná obsahující řetězec znaků

@pole = (1, 2, 3); # pole o třech prvcích $pole[1] = 4; # v případě, že přistupujeme ke konkrétní položce, # která je VŽDY skalární hodnotou, umístíme před # název proměnné symbol $ @pole[0,2] = (7,9); # v případě, že přistupujeme k několika prvkům # najednou umístíme před název proměnné symbol @

%skoly = ("pavel" => "FI MUNI", "petr" => "FIT VUT"); # asociativní pole, hodnoty jsou zadávány ve tvaru # klíč => hodnota print $skoly{"pavel"}; # vypíše: FI MUNI # hodnota je opět skalární print join( ', ', @skoly{'pavel', 'petr'}); # vypíše: FI MUNI, FIT VUT # hodnota je opět seznam

Krása Perlu

Larry Wall považuje sám sebe za umělce a Perl za umělecké dílo. Následující program slouží jako malá ukázka, čeho je tento jazyk schopen. +more Program vypíše (záměrně) poměrně pomalu slova: Just another Perl / Unix hacker. Za tím účelem vytvoří 32 paralelních procesů, které složitě synchronizuje pomocí rour.

@P=split//,". URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=. +morefork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix. $P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P. ]/&& close$_}%p;wait until$. ;map{/^r/&&}%p;$_=$d[$q];sleep rand(2)if/\S/;print.

Toto samozřejmě není doporučený ani obvyklý způsob zápisu programů v Perlu, ale pouze ukázka schválně neoptimálního kódu.

Literatura

Reference

Externí odkazy

[url=http://www. cpan. +moreorg]CPAN. org[/url] - bohatá kolekce software, modulů, skriptů a dokumentace * [url=https://metacpan. org]metacpan. org[/url] - bohatá kolekce software, modulů, skriptů a dokumentace * [url=http://perl6. cz/wiki/Perl6. cz]české stránky o Perl6[/url] Články a učebnice: * [url=http://www. root. cz/serialy/perlicky]seriál Perličky na Root. cz[/url] * [url=http://www. root. cz/serialy/regularni-vyrazy]seriál Regulární výrazy na Root. cz[/url] Související projekty: * [url=http://gtk2-perl. sourceforge. net]gtk2-perl[/url] - psaní GUI aplikací v Perlu nad GTK2 * [url=http://www. wxperl. it]wxPerl[/url] - psaní GUI aplikací v Perlu pomocí wxWidgets.

Kategorie:Dynamicky typované programovací jazyky Kategorie:Skriptovací jazyky Kategorie:Svobodný software Kategorie:Objektově orientované programovací jazyky Kategorie:Unixové programátorské nástroje

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top