Tento článek je o programovacím jazyku. O typografické jednotce perl pojednává článek typografický bod.
Perl
Paradigmamultiparadigmatický: funkcionální, imperativní, objektově orientovaný, reflexní, generický
Vznik18. prosince 1987
AutorLarry Wall
VývojářLarry Wall
Poslední verze5.36.0 (28. května 2022[1])
5.34.1 (13. března 2022[2])
5.32.1 (23. ledna 2021[3])
Poslední nestabilní verze5.37.6 (20. listopadu 2022[4])
Typová kontroladynamická
Ovlivněn jazykyAWK, Smalltalk 80, Lisp, C, C++, sed, Unix shell, Pascal
Ovlivnil jazykyPython, PHP, Ruby, ECMAScript, Dao, Windows PowerShell, JavaScript, Falcon
OSmultiplatformní
LicenceGNU GPL, Artistic License
Webperl.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 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ýhody Perlu

Nevýhody Perlu

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.

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) { 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

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.

Literatura

Reference

  1. nntp.perl.org. perl 5.36.0 is now available [online]. 2022-05-28 [cit. 2022-12-13]. Dostupné online. (anglicky) 
  2. nntp.perl.org. Perl 5.34.1 is now available! [online]. 2022-03-13 [cit. 2022-12-13]. Dostupné online. (anglicky) 
  3. nntp.perl.org. Perl 5.32.1 is now available! [online]. 2021-01-23 [cit. 2021-10-13]. Dostupné online. (anglicky) 
  4. nntp.perl.org. Perl 5.37.6 has been released [online]. 2022-11-20 [cit. 2022-12-13]. Dostupné online. (anglicky) 
  5. Define Perl at Dictionary.com [online]. Dictionary.com, LLC [cit. 2018-06-02]. Dostupné online. (anglicky) 
  6. 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) 
  7. 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. 
  8. Obfuscated Perl Program (Perl Paraphernalia, perl.plover.com)

Externí odkazy

Články a učebnice:

Související projekty: