Perl

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
Tento článek pojednává o programovacím jazyku. O typografické jednotce perl pojednává článek typografický bod.

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 arogantní (Laziness, Impatience and Hubris).

Obsah

Výhody Perlu

  • výhody interpretovaného jazyka, především rychlý vývoj bez nutnosti kompilace a linkování
  • přes 4000 volně dostupných modulů třetích stran skrz 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. Např. rozhraní Perlu pro databáze (DBI) podporuje databáze Oracle, Sybase, PostgreSQL, MySQL, SQLite a modul CGI.pm umožňuje lehce pracovat s HTML formuláři.
  • 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
  • dynamická práce s pamětí (není třeba destruktorů…) 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, a dalších
  • ukazatele na statické, dynamické i anonymní datové struktury
  • umožňuje procedurá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 (programovací jazyk)/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>
  • šablony (write)…

Nevýhody Perlu

  • nedisciplinovaný programátor může snadno vytvářet nesrozumitelný kód
  • při některých aplikacích se může projevit neefektivnost interpretru ve srovnání s kompilovanými jazyky, zejména spotřeba paměti
  • adresu odkazů není možno uložit do asociativního pole (hash)
  • kruhové odkazy a problematika jejich destrukce (nutné vytvořit destruktor ručně)
  • mnozí tvrdí že je to jazyk nevhodný pro výuku programování, ostatním stačí 'use strict;'

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_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 @_.

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 skalární hodnotou, 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í

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

Literatura

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

Č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


Programovací jazyky

ABAP | Ada | AppleScript | AWK | Assembler | C | C++ | C# | COBOL | ColdFusion | Clean | D | Eiffel | Erlang | Flex | Fortran | JADE | Java | JavaScript | Lisp | Lua | Oberon | Object Pascal | Objective-C | Pascal | Pawn | Perl | PHP | Python | REALbasic | REBOL | RPG | Ruby | SQL / PL/SQL | Tcl / Tcl/Tk | Visual Basic / VBScript | VB.NET | Visual FoxPro

Akademické: APL / J | Baltazar | Baltík | Karel | OCaml | Haskell | Scheme | Smalltalk | Logo | MATLAB | Mathematica | ML | Prolog

Ostatní: ALGOL | BASIC | Clipper | Forth | Goedel | Limbo | Miranda | Modula-2 / Modula-3 | MUMPS | PL/1 | Simula 67 | Brainfuck

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net