programovací jazyk From Wikipedia, the free encyclopedia
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ů.
Paradigma | multiparadigmatický: funkcionální, imperativní, objektově orientovaný, reflexní, generický |
---|---|
Vznik | 18. prosince 1987 |
Autor | Larry Wall |
Vývojář | Larry Wall |
Poslední verze | 5.36.0 (28. května 2022[1]) 5.34.1 (13. března 2022[2]) 5.32.1 (23. ledna 2021[3]) |
Poslední nestabilní verze | 5.37.6 (20. listopadu 2022[4]) |
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 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 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ž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).[6]
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.
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) { 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
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.[8]
@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.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.