Hlavní navigace

Nebojte se velblouda!

Michal Burda

Před časem na Rootu vyšel článek s názvem "Nebojte se hroznýše!" a pojednával o programovacím jazyku Python. To mě inspirovalo zvolat podobné heslo o trochu jiném jazyku...

Perl (Practical Extraction and Report Language) je velmi zajímavý jazyk oplývající neobvyklými možnostmi. V dnešním článku bych vám jej chtěl trochu přiblížit a kdoví, možná že mu propadnete stejně jako já.

Co je to Perl

Autorem Perlu je jistý pan Larry Wall, který jej původně vytvořil pro svou osobní potřebu. A jak už to bývá, z malé utilitky se vyklubal mocný nástroj. Oficiální verze 1 vyšla v prosinci roku 1987. Od té doby přešel jazyk mnohými úpravami a vylepšeními až do současné verze s označením 5.

Perl je optimalizovaný pro práci s textem, vyhledávání informací ze souborů a tisk sestav. Je také vhodným jazykem pro různé systémové úlohy. Sám jej používám jako elegantnější (rychlejší, snazší na programování) variantu než skriptování v shellu.

Vlastnosti Perlu jsou koktejl jazyka C, sed, awk, sh a možná i Pascalu, csh a Basicu. Syntaxe je pak nejvíce podobná „céčku“.

Perl nemá žádné teoretické limity na paměť a podobné hardwarové věcičky. Proměnné se nedeklarují (alokují a dealokují se automaticky), rekurze je neomezená a pole v paměti rostou podle současné potřeby. S klidem indiána dokážete jedním příkazem načíst obsah celého souboru do jedné řetězcové proměnné.

Perlu je jedno, jaké data máte v proměnné uloženy; ať to je řetězec nebo číslo, pracuje se s ním vždy stejně. Teprve podle kontextu operace se řetězec vnitřně překonvertuje na číselnou hodnotu nebo naopak.

Abychom si udělali obrázek, jaký Perl vlastně je, ukážeme si nejmenší program v Perlu, který vypíše pouze nějakou hlášku a skončí:

print "Ahoj lidi!";

Takový prográmek můžete spustit příkazem

perl <nazev_programu> 

nebo na začátek přidat

#!/usr/bin/perl

a soubor spouštět přímo.

Vidíte tu jednoduchost? Žádné hlavičky, patičky a deklarace – jde se přímo k jádru věci.

Interpretovaný jazyk

Perl je interpretovaným jazykem a to znamená, že se nekompiluje do strojového kódu, ale vykonává speciálním programem – interpretem jazyka. To má své výhody i nevýhody. Výhoda je v jednoduchosti spouštění a upravování programu – vždy pracujeme přímo se zdrojovými texty. Nevýhoda spočívá ve zpomalení výkonu a také v tom, že ke spuštění programu v Perlu musíme mít v počítači nainstalován jeho interpret. To je vážná nepříjemnost. Snad ji zmírní fakt, že interprety jsou volně šiřitelné.

Interpret Perlu lze docela určitě provozovat na těchto platformách:

  • AIX,
  • BeOS,
  • BSD/OS,
  • DOS,
  • FreeBSD,
  • HP-UX,
  • Hurd,
  • Irix,
  • Linux :-),
  • LynxOS,
  • MacOS,
  • OpenBSD,
  • OS/2,
  • Solaris,
  • SunOS,
  • Ultrix,
  • VMS,
  • Windows 3.1/95/98/2000/NT,
  • …a mnoho, mnoho dalších.

Silné programátorské nástroje

Mezi konstrukcemi jazyka Perl se skrývají opravdové „kanóny“, kterými si Perl získává své přívržence.

Regulární výrazy

Regulární výrazy jsou jedny z nejsilnějších nástrojů Perlu. Pokud už s Unixem (Linuxem) máte jisté zkušenosti, určitě mi dáte za pravdu. Regulární výrazy slouží pro práci s texty – k vyhledávání, nahrazování a podobně. Speciálními znaky určíte, jaký text se má vyhledat a co s ním vlastně chcete udělat. Více se o regulárních výrazech dozvíte z článků pana Satrapy.

Asociativní pole

Dalším nástrojem těžkého kalibru jsou asociativní pole. Kdekdo zná obyčejná pole z jiných programovacích jazyků. K jejich prvkům se přistupuje číselnými indexy. Asociativní pole jsou něco podobného s tím, že paměťové buňky místo čísel adresujete řetězcem!

Počet prvků v poli se samozřejmě může dynamicky měnit, mechanizmem hashování se dosahuje výborné rychlosti v přístupu k uloženým položkám.

Na první pohled nevýrazný prvek jazyka v sobě skýtá nebývalé možnosti. Asociativní pole jsou v Perlu opravdu hojně využívány. Plnohodnotně se jimi suplují datové typy záznam (C: struct, Pascal: record), objekty, tabulky a podobně.

Zkusme si malý příklad. Představte si, že děláte jakýsi účetní program, který bude sčítat výdaje v domácnosti: za jídlo, elektřinu, plyn, noviny, zábavu atd. Abyste tohle nějak rozumně naprogramovali, museli byste vytvářet datový typ, seznam nebo něco podobného, v něm pracně vyhledávat typy výdajů, přičítat a podobně. Kdyby se výčet druhů výdajů změnil, znamenalo by to relativně pracné přidávání nových položek do seznamu atd. V Perlu jednoduše použijete asociativní pole: klíčem (indexem) bude druh výdaje a hodnotou utracené peníze. Hotovo.

Objektově orientované programování

Objektově orientované programování je v poslední době velice módní záležitostí a i v Perlu si můžete užívat všech jeho vymožeností.

Objektově orientované programování se snaží řešení problémů přiblížit co nejvíce reálnému světu. Konstrukcí jazyka se vytvářejí objekty, které věrně popisují vlastnosti a chování skutečných věcí a interakce mezi nimi. Podstatnou výhodou takového přístupu je zapouzdření dat a obslužných funkcí (metod), polymorfismus a samozřejmě i dědičnost vlastností a chování mezi jednotlivými objekty. Všechny tyto prvky moderního programovacího stylu si v Perlu můžete vychutnat.

A další…

Perl vyhovuje standardu POSIX a má dobrou podporu neanglických jazyků (i češtiny :-).

Kód Perlu lze připojit k aplikacím napsaným v jazyku C nebo C++. Může tedy volat nebo být volán vaším „céčkařským“ kódem přes dokumentované rozhraní.

Perl přímo podporuje databázové formáty DBM, NDBM, SDBM, GDBM a Berkeley DB. Importem vhodné knihovny není samozřejmě problém ani využití SQL a podobně.

Množství knihoven

Jak je zvykem z naprosté většiny programovacích jazyků, i v Perlu si můžete vytvářet znovu použitelné moduly kódu – knihovny. Kromě toho je na Internetu nepřeberné množství dalších (zcela free) knihoven. Veškeré materiály kolem Perlu se shromažďují do archívu známého pod zkratkou CPAN (Comprehensive Perl Archive Network), který má zrcadla na serverech po celém světě (viz odkazy níže).

S přídavnými moduly můžete psát CGI, pracovat s databázemi, Internetem – možností je opravdu hodně. My si ale ukážeme něco jiného, neméně atraktivního. Máte-li kromě Perlu nainstalovánu také knihovnu GTK a modul GTK-Perl, můžete psát aplikace pro X-Window.

#!/usr/bin/perl -w

# Načtení přídavných modulů
use locale;
use Gtk;

# Definicice procedury (funkce)
sub quit_app {
  Gtk->exit(0);
  return 0;
}


# Hlavní program

Gtk->init();                            # Inicializace GTK
Gtk->set_locale();                      # Podpora národního prostředí

$window = new Gtk::Window('toplevel');  # Vytvoření nového okna...
$window->set_title('Ahoj lidi!');       # ...s titulkem 'Ahoj lidi!'
$window->border_width(20);              # ...a okrajem 20 px
$window->signal_connect("delete_event",
  \&quit_app);                          # Připojení obsluhy signálu pro
                                        # uzavření okna aplikace

$button = new Gtk::Button('Ahoj!');     # Vytvoření tlačítka
$window->add($button);                  # Vložení tlačítka do okna
$button->signal_connect('clicked',
  \&quit_app);                          # Připojení obsluhy signálu pro
                                        # stisk tlačítka (aplikace se ukončí)

$button->show();                        # Povolení zobrazení tlačítka
$window->show();                        # Zobrazení okna aplikace

Gtk->main();                            # Spuštění hlavního cyklu programu

Spuštěním uvedeného zdrojového kódu by se vám mělo objevit asi takovéto okno:

Obrázek aplikace Perlu

Stinné stránky

Teoretici programovacích jazyků nad Perlem šílí. A mají proč. Mnoho základních rysů jiných programovacích jazyků Perl naprosto popírá: proměnné se nedeklarují, nelze vytvořit vlastní datové typy (ono to po pravdě řečeno ani moc není třeba – viz asociativní pole), volání funkce na levé straně přiřazovacího příkazu, stejná věc v různém kontextu znamená pokaždé něco jiného a tak dále.

Přestože jde o jazyk velmi praktický a silný, nedoporučil bych jej začátečníkům v programování. Jeho syntaxe je totiž velice rozevlátá – jednu stejnou věc lze v Perlu zapsat několika různými způsoby – a to by pro ty, kteří se obecné základní principy programování teprve učí, mohlo být poněkud matoucí.

Odkazy

Jestliže jste se posledním odstavcem nenechali znechutit a máte zájem se na Perl podívat trochu víc zblízka, zkuste si třeba některý z následujících odkazů (mimo jiné na nich zjistíte, proč se tento článek jmenuje „Nebojte se velblouda“ :-):

www.perl.org
www.perl.com
www.perl.cz

www.cpan.org
Oficiální prohledávač archívu CPAN
Další prohledávač CPAN archívu
CPAN na sunsite.mff.cu­ni.cz
Oficiální FTP archív CPANu
FTP archív CPANu na ftp.muni.cz

www.gtk.org
GTK+ Tutorial
Gtk-Perl Tutorial

Perl je kontroverzní jazyk. Má své odpůrce i příznivce. Záleží na každém, ke které skupině se přiřadí. Tento článek si dal za úkol Perl představit a ukázat jeho silné i slabé stránky. Snad se mi to povedlo. (Neskrývám, že jsem jeho přívržencem a tak jsem ho možná příliš vychválil.)

Našli jste v článku chybu?

30. 10. 2000 12:40

JAToSEm (neregistrovaný)

V Perlu trosku programuju ;-),
teprve asi rok a pul, vetsinu veci, ktere pouzivam, jsem nasel na teto http://www.geocities.com/RodeoDrive/4244/perl.htm adrese a v nekolika knizkach. Obvykle ho pouzivam na spojeni WEBtoMySQL a opacne. Je to velmi srozumitelny jazyk a doporucoval bych ho i zacatecnikum :-).
Neco ke kompilacim: Perl jako CGI je mozno lehce zmenit na FCGI, coz se vyuziva u casto spoustenych Aplikaci, Program zustane zkompilovany v pemeti po dobu nastavenou v Apache (15 - 20 minut)…

25. 10. 2000 22:56

Jaromir Dolecek (neregistrovaný)

Moje zkusenosti z vytvarenim pole poli ci pole hashu
ci podobnych struktur je opacna - v Perlu je udelana
naprosto neintuitivne a vzdy, kdyz to potrebuju, mi
dlouho trva nez zjistim, jak to ma byt - pouhe prirazeni $pole1[3] = @pole2 nefunguje. Taky me silene stve viditelnost promennych - nekdy musim pouzit zmenit my() na local() nebo naopak, aby byla promenna videt v bloku, kde ma. Silim ze zpusobu, jakym se v Perlu predavaji parametry funkcim. Irituje me, jak musim Perlu furt oslit typ prom…


Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky