文王卦是什么意思
Paradigma | multiparadigmaticky: funkcionální, imperativní, objektově orientovany, reflexní, genericky |
---|---|
Vznik | 18. prosince 1987 |
Autor | Larry Wall |
Vyvojá? | Larry Wall |
Poslední verze | 5.42.0 (3. ?ervence 2025) |
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 | perl.org |
Perl (vyslovnost [purl] ?i [p??l]IPA)[1] je interpretovany programovací jazyk vytvo?eny 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 vykonné 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“ (anglicky 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?itych. Jeden ze zp?sob? je p?itom obvykle velmi stru?ny, tak?e Perl získal nezaslou?enou pověst jazyka, ve kterém se tvo?í nesrozumitelny a neudr?ovatelny kód. Tato kritika ale není oprávněná, Perl je vhodny k ?e?ení malych i velkych problém?. Schopnosti a nástroje, které se pou?ívají u velkych projekt?, lze pou?ít i v krátkych skriptech.
Dobry programátor má podle Larryho Walla byt líny, netrpělivy a sebevědomy (Laziness, Impatience and Hubris).[2]
Vyhody Perlu
[editovat | editovat zdroj]- vyhody ?interpretovaného“ jazyka, p?edev?ím rychly vyvoj 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í vypisy, pokud není program spu?těn s ur?itym parametrem.
- p?es 18 000 volně dostupnych 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 vyhodněj?í jazyk, ktery 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 svobodny software, licencován pod Artistic License nebo GNU General Public License
- ve srovnání s kompilovanymi jazyky lep?í mo?nosti zabezpe?ení p?i běhu kódu
- snadné spojování ji? hotovych 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?enych 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í vyrazy 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 dynamicky 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íjeny 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 vyhodami, jako je p?i vlo?ení PHP
- interpret Perlu m??e byt vlo?en (embedded) do ostatních systém?, #include <Perl.h>
- rozsáhlá dokumentace a literatura, komunita kolem Perlu, konference, news…
Nevyhody Perlu
[editovat | editovat zdroj]- nedisciplinovany programátor m??e extrémně snadno vytvá?et nesrozumitelny kód (jazyk velice benevolentní)
- p?i některych aplikacích se m??e projevit neefektivnost dynamicky typovaného jazyka ve srovnání se staticky typovanymi 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 nevhodny pro vyuku programování. P?i pou?ití ve vyuce 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 samostatny parser ani formální definice syntaxe jazyka;[zdroj?] jediny parser perlu ?ady 5 je samotny interpret perlu, ani programátorské editory Vim a Emacs neumí pro perl korektně zvyrazňovat syntaxi
- jazyk obsahuje funkce typu typemap, která dovoluje provést kód stejně jako funkce eval()[3]
Budoucí vyvoj (Perl 6 a VM Parrot)
[editovat | editovat zdroj]V ?ervenci roku 2000, hned po setkání, na kterém byl odstartován projekt vyvoje 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 dynamickych 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 jinymi 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í vystup:
Hello, world! The magic number is 234542354. Hello, world! The magic number is -1.
Vysvětlení: print; v podstatě znamená print $_;, kde $_ je vychozí proměnná. s/\d+/-1/; (nebo také $_ =~ s/\d+/-1/;) je regulární vyraz, jen? nahradí první nalezenou sekvenci ?íslic (celé ?íslo) ?íslem ?1.
Perl je dynamicky 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) { 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);
}
}
Vystupem 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 jakych parametr? funkce dostala a ulo?it si je do lokálních proměnnych. Samoz?ejmě existují knihovny, s jejich? pomocí je mo?né nadeklarovat validaci, vychozí hodnoty a podobně.
Práce s proměnnymi je v Perlu poněkud odli?ná od kompilovanych 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 slou?í jako malá ukázka, ?eho je tento jazyk schopen. 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.[4]
@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?eny ani obvykly zp?sob zápisu program? v Perlu, ale pouze ukázka schválně neoptimálního kódu.
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]- ↑ Define Perl at Dictionary.com [online]. Dictionary.com, LLC [cit. 2025-08-07]. Dostupné online. (anglicky)
- ↑ WALL, Larry; SCHWARTZ, Randal L.; CHRISTIANSEN, Tom. Programming Perl. P?íprava vydání Steve Talbott. 1. vyd. Beijing, Cambridge, Farnham, K?ln, Paris, Sebastopol, Taipei, Tokyo: O'Reilly, 9. 1996. xxi, 645 s. (Druhá edice). Dostupné online. ISBN 1-56592-149-6. OCLC 35663387 Kapitola Preface, s. 13. (anglicky)
- ↑ KR?Má?, Petr. Chyby v programovacích jazycích ohro?ují bezpe?nost aplikací. Root.cz [online]. Internet Info, s.r.o., 12. 12. 2017 [cit. 6.1.2018]. Powered by Linux. Dostupné online. ISSN 1212-8309.
- ↑ Obfuscated Perl Program (Perl Paraphernalia, perl.plover.com)
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. 1. vyd. Praha: Computer Press, 1997. 683 s. ISBN 80-85896-95-8. Pozn. o autorech.
- SRINIVASAN, Sriram. Programování v Perlu pro pokro?ilé: základy a techniky pro vyvojá?e (p?vodním názvem: Advanced Perl programing). P?eklad Martin Bla?ík; Editor Ivo Magera; Jazyková korektura Libor Vyhnálek. 1. vyd. Praha: Computer Press, 1998. 412 s. ISBN 80-7226-079-0.
- 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 ?erny; Jazyková korektura Eva Bublová; Odpovědny redaktor Ivo Magera; Technicky redaktor Ji?í Matou?ek. 1. vyd. Praha: Computer Press, 2002. 546 s. (Rychle a jistě. Internet). ISBN 80-7226-616-0. P?elo?eno z angli?tiny.
- KYSELA, Martin. Perl: kompletní kapesní pr?vodce programátora. Odpovědny redaktor Miroslav Lochman. 1. vyd. Praha: Grada, 2005. 134 s. ISBN 80-247-1170-2.
- DA?ENA, Franti?ek. Myslíme v jazyku PERL. Odpovědny redaktor Miroslav Lochman. 1. vyd. Praha: Grada, 2005. 700 s. (Knihovna programátora). ISBN 80-247-1147-8. Obsahuje bibliografii, bibliografické odkazy a rejst?ík.
Externí odkazy
[editovat | editovat zdroj]Obrázky, zvuky ?i videa k tématu Perl na Wikimedia Commons
Vyukovy kurs Perl ve Wikiverzitě
- (anglicky) CPAN.org – bohatá kolekce software, modul?, skript? a dokumentace
- (anglicky) metacpan.org – bohatá kolekce software, modul?, skript? a dokumentace
- ?eské stránky o Perl6
?lánky a u?ebnice:
Související projekty: