Perl

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Tento článek je o programovacím jazyku. O typografické jednotce perl pojednává článek typografický bod.
Perl
Paradigma multiparadigmatický, funkcionální, imperativní, objektově orientovaný, reflexní, generický
Vznikl v 18. prosince 1987
Autor Larry Wall
Vývojář Larry Wall
Poslední verze 5.26.1 (22. září 2017)[1]
5.24.3 (22. září 2017[2]
5.22.4 (15. června 2017[3])
Poslední nestabilní verze 5.27.7[4] (20. prosince 2017)
Typová kontrola dynamická
Ovlivněn jazyky AWK, Smalltalk 80, Lisp, C, C++, sed, Unix shell, Pascal
Ovlivnil jazyky Python, PHP, Ruby, ECMAScript, Dao, Windows PowerShell, JavaScript, Falcon
OS multiplatformní
Licence GNU GPL, Artistic License
Web www.perl.org

Perl (výslovnost [purl] či [pɜːl] IPA)[5] 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řitom 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).

Výhody Perlu[editovat | editovat zdroj]

  • výhody „interpretovaného“ jazyka, především rychlý vývoj bez nutnosti 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. 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, 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)
  • 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 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>
  • rozsáhlá dokumentace a literatura, komunita kolem Perlu, konference, news…

Nevýhody Perlu[editovat | editovat zdroj]

  • 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“ 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()[6]

Budoucí vývoj (Perl 6 a VM Parrot)[editovat | editovat zdroj]

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.

Ukázka kódu[editovat | editovat zdroj]

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 do verze 5.20 (květen 2014) neumožňoval 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 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[editovat | editovat zdroj]

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ě neoptimálního kódu.

Literatura[editovat | editovat zdroj]

  • WALL, Larry; SCHWARTZ, Randal L.; CHRISTIANSEN, Tom. Programování v jazyce Perl (původním názvem: Programming Perl). Překlad Martin Blažík; Editor ing. Martina Mojzesová; Odborná korektura ing. Bohumil Michal; Jazyková korektura Josef Novák. Praha: Computer Press, 1997. 683 s. ISBN 80-85896-95-8. (česky) Pozn. o autorech. 
  • SRINIVASAN, Sriram. Programování v Perlu pro pokročilé: základy a techniky pro vývojáře (původním názvem: Advanced Perl programing). Překlad Martin Blažík; Editor Ivo Magera; Jazyková korektura Libor Vyhnálek. Praha: Computer Press, 1998. 412 s. ISBN 80-7226-079-0. (česky) 
  • LEMAY, Laura. Naučte se Perl za 21 dní (původním názvem: Teach yourself Perl in 21 days). Překlad Bogdan Kiszka a Jaroslav Černý; Jazyková korektura Eva Bublová; Odpovědný redaktor Ivo Magera; Technický redaktor Jiří Matoušek. (Rychle a jistě. Internet). Praha: Computer Press, 2002. 546 s. (Rychle a jistě. Internet). ISBN 80-7226-616-0. (česky) Přeloženo z angličtiny. 
  • KYSELA, Martin. Perl: kompletní kapesní průvodce programátora. Odpovědný redaktor Miroslav Lochman. Praha: Grada, 2005. 134 s. ISBN 80-247-1170-2. (česky) 
  • DAŘENA, František. Myslíme v jazyku PERL. Odpovědný redaktor Miroslav Lochman. (Knihovna programátora). Praha: Grada, 2005. 700 s. (Knihovna programátora). ISBN 80-247-1147-8. (česky) Obsahuje bibliografii, bibliografické odkazy a rejstřík. 

Reference[editovat | editovat zdroj]

  1. HAY, Steve. Perl 5.26.1 is now available! [online]. 2017-09-22 [cit. 2018-01-02]. Nntp.perl.org. Dostupné online. (anglicky) 
  2. HAY, Steve. Perl 5.24.3 is now available! [online]. Rev. 2017-09-22 [cit. 2018-01-02]. Nntp.perl.org. Dostupné online. (anglicky) 
  3. HAY, Steve. Perl 5.22.4 is now available! [online]. 2017-07-15 [cit. 2018-01-02]. Nntp.perl.org. Dostupné online. (anglicky) 
  4. chris. Perl 5.27.7 is released [online]. 2017-12-20 [cit. 2018-01-02]. Nntp.perl.org. Dostupné online. (anglicky) 
  5. Perl | Define Mach at Dictionary.com [online]. Dictionary.com, LLC. [cit. 2017-11-20]. Dictionary.com. Dostupné online. (anglicky) 
  6. KRČMÁŘ, Petr. Chyby v programovacích jazycích ohrožují bezpečnost aplikací. Root.cz [online]. Internet Info, s.r.o., 2017-12-12 [cit. 2018-01-06]. Powered by Linux. Dostupné online. ISSN 1212-8309. (česky) 

Externí odkazy[editovat | editovat zdroj]

Články a učebnice:

Související projekty:

  • (anglicky) gtk2-perl – psaní GUI aplikací v Perlu nad GTK2
  • (anglicky) wxPerl – psaní GUI aplikací v Perlu pomocí wxWidgets