Perl
Z Wikipedie, otevřené encyklopedie
Perl 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. 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 Magazin 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 (there's more than one way to do it). Umožňuje psát krátké programy jednoduše a rychle a přítom nebrání v psaní těch složitých. 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).
Obsah |
[editovat] Výhody Perlu
- výhody "interpretovaného" jazyka, především rychlý vývoj bez nutnosti kompilace a linkování (program je skompilován po každém spuštění a je kdyboli 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. A například vynechat kód pro ladicí výpisy, pokud není progam spuštěn s určitým parametrem.)
- přes 18000 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.
- dokumentace a literatura, komunita okolo Perlu, konference, news…
- 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)
- 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, ASP, CGI, ISAPI, OLE, WSH, WSC, WxPerl, atd.)
- převzetí osvědčených konstrukcí z ostatních jazyků, jako např. C (programovací jazyk), 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)
- dynamicky volání procedur (název známe až za běhu programu)
- stabilita: mnoho let mnoha vývojáři 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é jenž potřebuje 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)
- Perl umí zacházet se zakódovanými webovými daty, mezi něž patří transakce u elektronickém obchodování
- Perl může být součástí web serverů čímž může dojít k zrychlení o 2000 %
- mod perl umožňuje web serveru Apache 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 <Perl.h>
[editovat] Nevýhody Perlu
- nedisciplinovaný programátor může snadno vytvářet nesrozumitelný kód (což je ovšem pravda ve všech jazycích)
- 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" referencí, které nezvyšují hodnotu čítače referencí)
- mnozí tvrdí že je to jazyk nevhodný pro výuku programování, ostatním stačí '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í.
[editovat] 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 Parrot. 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.
[editovat] 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 <ENTER> $a = $b = 1; $a+$b <ENTER> for (1..1_000_000) { print +($a+$b+$_)."\n"; } <ENTER> sin($a)**0.5 <ENTER>
Složitější ukázkou je funkce, která vypíše Fibonacciho posloupnost:
fib(100); sub fib { my ($a, $b) = (0, 1); while ($b < $_[0]) { print "$b "; ($a, $b) = ($b, $a + $b); } }
Výstupem tohoto programu by bylo:
1 1 2 3 5 8 13 21 34 55 89
Perl neumožňuje tradiční způsob předání parametrů funkci. Hodnoty předávané při volání funkce jsou uloženy v poli @_ a programátor si musí sám zkontrolovat kolik a jakých parametrů funkce dostala a uložit si je do lokálních proměných. Samozřejmě existují knihovny s jejichž pomocí je možné nadeklarovat validaci, defaultni hodnoty a podobne.
Práce s proměnnými je v Perlu poněkud odlišná od běžný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
[editovat] Krása perlu
Larry Wall považuje sám sebe za umělce a Perl za umělecké dílo. Následující program [1] slouží jako malá ukázka, čeho je tento jazyk schopen. Program vypíše 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=!fork;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ě neoptimalního kodu.
[editovat] Literatura
- Perl pro zelenáče: Pavel Satrapa, Neokortex, s.r.o., Na rovnosti 3, 130 00 Praha 3, ISBN 80-86330-02-8, 2000
- Programování v jazyce Perl: Larry Wall, Tom Christiansen & Randal L. Schwartz, Computer Press, Hornochlupická 22, 140 00 Praha 4, 1997
- Programování v Perlu pro pokročilé: Sriram Srinivasan, Computer Press, ISBN 80-7226-079-0, 1998
- Naučte se Perl za 21dní: Laura Lemay, Computer Press, ISBN 80-7226-616-0, 2002
- Perl - kapesní průvodce programátora: Martin Kysela, Grada Publishing a.s., ISBN 80-247-1170-2, 2005
- Myslíme v jazyku Perl: František Dařena, Grada Publishing a.s., ISBN 80-247-1147-8, 2005
[editovat] Externí odkazy
- www.perl.org - domovská stránka Perlu (anglicky)
- www.cpan.org - bohatá kolekce software, modulů, skriptů a dokumentace (anglicky)
- www.cpan.cz - české stránky o Perlu
- perl6.cz - české stránky o Perl6
Články a učebnice:
Související projekty:
- gtk2-perl - psaní GUI aplikací v Perlu nad GTK2
- wxPerl - psaní GUI aplikací v Perlu pomocí wxWidgets
|
|||||||||||||||||||||||||||||