P E R L Practical Extraction and Report Language
|
PERL: základný prehľad o jazyku 0. Obsah
1. Premenné 1.1 Skaláre 1.1.1 Operácie a priradenia 1.2 Polia 1.3 Hashe 2. Súbory 3. Podmienený príkaz a príkazy riadenia 3.2 Príkazy riadenia 3.2.1 foreach 3.2.2 for 3.2.3 while a until 3.2.4 Príkazy pre prerušenie cyklu 3.2.5 Porovnávacie výrazy 4.1 Regulárne výrazy 4.2 Viac o regulárnych výrazoch 5. Procedúry 5.1 Lokálne premenné 6. Formát 6.2 Použitie formátu
1. Premenné
Perl pozná 5 druhov premenných: skaláre, polia, hashe, podprogramy a typegloby. Premenné sa v Perli rozoznávajú pomocou špeciálneho znaku, ktorým začínajú:
V Perli premenné môžete ale nemusíte deklarovať. Pomocou direktívy use strict 'vars'; sa dá nastaviť vynútenie deklarovania premenných, kedy použitie nedeklarovanej premennej bude hlásené ako chyba. Toto je výhodné pri väčších projektoch, kedy sa vám ľahko stane, že urobíte preklep v názve premennej a budete dva dni hľadať, v čom je chyba.
Premennú nadeklarujete celkom jednoducho pomocou slova my:
Skalár je premenná obsahujúca jednotlivú hodnotu, reťazec alebo číslo (prípadne referenciu). Skalárnu premennú spoznáte podľa toho, že začína znakom '$' (dolár). Môžete teda napísať:
Perl používa všetky aritmetické operátory bežné v jazyku C.
Pre reťazce má Perl medzi inými aj operátory:
Priradenie hodnoty:
Pole funguje v Perli
podobne ako v iných programovacích jazykoch, čiže obsahuje skupinu svojich
prvkov, na ktoré sa odkazujeme celočíselným indexom. Prvý prvok má index
0. Tu sú niektoré prípady použitia polí a ich prvkov:
Všimnite si, že znak @ sa zmenil na znak $, pretože farby[0], t.j. prvok poľa ja skalárna premenná. Vhodný spôsob pridávania prvku do poľa je použitie funkcie push:
ktorá pridá reťazec "zlta" na koniec poľa farby. Na pridanie 2 alebo viacerých prvkov použijeme napr.:
Pole má v Perli dynamickú veľkosť, podľa toho, koľko ste mu dali prvkov. Keď mu vytvoríte prvok s indexom väčším než mal doterajší posledný prvok, pole sa automaticky zväčší na potrebnú veľkosť. Počet prvkov poľa môžete zistiť napr. takto:
Funkcia push vracia posledný prvok nového zoznamu. Teda:
Funkcia pop odstráni poslednú položku poľa a vracia hodnotu posledej položky poľa:
Hash je nesprávny, ale krátky a preto používaný názov pre asociatívne pole. Perl na rozdiel od väčšiny iných jazykov podporuje priamo polia, ktoré sa indexujú reťazcami namiesto čísel. Využitie týchto hashov je prakticky neobmedzené a spoločne s automatickou správou pamäti Perlu dostávame silný prostriedok pre tvorbu zložitejších štruktúr. Hashe môžeme použiť namiesto statických štruktúr známych z jazykov ako C/C++. Skutočnosť, že ide o hash vyjadrujeme tým, že pred názov hashu dáme znak percento %.V rámci asociatívnych polí su dôležité 2 pojmy, a to kľúče a hodnoty. Kľúče sú vlastne indexy poľa. Hodnoty sú jeho hodnoty ;) Myslím, že najlepšie bude ukázať používanie hashov v praxi. Takže, zadefinujeme si hash s kľúčmi január, február, ... a hodnotami ktoré znamenajú ich číselné vyjadrenie.
So súbormi sa v jazyku Perl pracuje pomocou tzv. filehandles. Filehandle - logické meno súboru, je to reťazec písaný veľkými písmenami, napr. SUBOR. Na začiatku uvediem príklad v jazyku Perl, ktorý opíše obsah súboru na obrazovku, t.j. má rovnakú funkciu ako príkaz cat v UNIXe.
V tomto príklade má súbor logické meno INFO. Obsah súboru sa číta jednoducho tak, že sa premennnej priradí logické meno súboru uzavreté v špicatých zátvorkach. Teda celý obsah súboru (všetky riadku súboru) sa načítajú do poľa, a to tak, že každý riadok predstavuje jeden prvok poľa @lines. Treba ešte podotknúť, že riadok sa uloží do prvku poľa aj so znakom konca riadku. Súbor na vstupe môžme prečítať a vypísať na obrazovku aj prostredníctvom cyklu while:
Funkcia open otvára súbor ako vstupný (t.j. na čítanie). Prvý parameter je filehandle, logické meno súboru. Druhý parameter je meno súboru vrátane cesty. V našom príklade je meno súboru s cestou uložené v premennej $file. Funkcia close ukončí prácu so súborom. Niektoré logické mená súborov sú preddefinované a je možné ich v programe použiť.
Ak chceme zapisovať do súboru, otvoríme súbor pre výstup a príkaz print použijeme s parametrom filehandle. Pre zápis reťazca do súboru s filehandlom INFO použijeme príkaz:
Na otvorenie štandardného vstupu (obvykle vstup z klávesnice) a štandardného výstupu (obrazovka) môžeme použiť:
Nasledujúci príkaz číta dáta zadávané užívateľom z klávesnice, až do zadania prázdneho reťazca. Prečítané dáta vypisuje na obrazovku:
Príkaz print implicitne pracuje s premennou $_, preto v príkaze print nie je uvedený žiaden parameter. Podobne aj pri čítaní zo súboru sú dáta implicitne ukladaní do premennej $_. Preto je možné predchádzajúci príkaz napísať skrátene takto:
Tu môžete nájsť rôzne funkcie pre prácu so súbormi.
Perl samozrejme podporuje podmienený príkaz if. Má tieto možné tvary:
V poslednom, štvrtom tvare podmieneného príkazu, za kľúčovým slovom unless musíme samozrejme použiť negovaný tvar podmienky, ktorej obyčajný tvar by sme použili v prvých troch tvaroch podmieneného príkazu.
Pripomeniem ešte, že prázdny reťazec je vyhodnotený ako false.
Príkaz foreach postupne použije každý prvok poľa alebo inej štruktúry v tvare zoznamu (riadkov súboru). Pre každý prvok poľa vykoná sekvenciu príkazov, ktorá nasleduje. Má tento tvar:
Príkaz for má tento tvar:
Napríklad:
Príkaz while prevádza opakovane sekvenciu príkazov pokiaľ platí podmienka. Príkaz until prevádza opakovane sekvenciu príkazov pokiaľ nezačne platiť podmienka. Majú takýto tvar:
Namiesto while môžeme použiť aj príkaz do while. Jediným rozdielom je, že sekvencia príkazov sa vykoná aspoň raz. Má tvar:
3.2.4 Príkazy prerušenia cyklu
Existuje niekoľko príkazov, ktorými je možné ukončiť cyklus alebo ho modifikovať. Sú to napríklad príkazy last a next: last Príkaz last ukončí cyklus. Obvykle býva príkaz last spojený s príkazom if. Nasledujúci cyklus while(TRUE) môže vyzerať ako nekonečný, v skutočnosti sa ukončí v okamihu, keď je $i nula:
next Príkaz next skočí na začiatok cyklu, zvyšné príkazy za next sa vynechávajú. Často bývá príkaz next spojený s príkazom if.
Riadiace štruktúry sú založené na vyhodnotení výrazu s výsledkom true alebo false. V Perle je za true považované každé nenulové číslo a neprázdny reťazec. Ako false je vyhodnotené číslo nula, reťazec obsahujúci iba nulu a prázdny reťazec. Príklady porovnaní:
Je možné použiť tiež logické and, or alebo not:
Jednou z najväčších výhod Perlu (možno i najväčšou) sú výkonnné prostriedky pre manipuláciu s reťazcami. Základom sú regulárne výrazy (RE), ktoré sú použiteľné mnohými ďalšími utilitami UNIXu.
Regulárne výrazy sú uzavreté do lomených zátvoriek. Porovnávanie s regulárnymi výrazmi sa vykonáva pomocou operátoru =~. Príklad: Nasledujúci výraz je pravdivý, ak sa v premennej $sentence vyskytuje reťazec velka.
RE sú case senzitívne. Pokiaľ teda premenná $sentence obsahuje reťazec
potom porovnanie v príklade vyššie je pravdivé.
Operátor !~ je používaný na testovanie nerovnosti. Ak teda premenná $sentence obsahuje reťazec "Velka hrdzava liska", je výraz
pravdivý, pretože reťazec velka sa nevyskytuje v premennej $sentence.
4.2 Viac o regulárnych výrazoch
V RE sa používa mnoho špeciálnych znakov. Práve tieto špeciálne znaky robia z RE silné prostriedky, ale tiež spôsobujú, že RE vyzerajú na pohľad komplikovane. Uvediem niektoré špeciálne znaky používané v RE a ich význam:
Existují ďalšie možnosti. Pre porovnanie so skupinou znakov sa používajú hranaté zátvorky. Porovnanie sa prevádza na ľubovoľný znak vo vnútri zátvoriek. Pomlčka - vo vnútri hranatých zátvoriek označuje znaky medzi uvedenými znakmi a znak ^ na začiatku zátvorky znamená negáciu:
Vertikálna čiara | znamená "or" a okrúhle zátvorky ( ... ) je možné použiť na zoskupovanie:
Niektoré špeciálne znaky:
Znaky ako $, |, [, ), \, / majú v RE zvláštny význam. Ak chceme porovnávať na výskyt niektorého z týchto znakov, musíme pred nimi uviesť spätnú lomenú zátvorku, t.j.:
Ako každý dobrý programovací jazyk, tak aj Perl umožňuje užívateľovi definovať svoje vlastné funkcie, které nazýváme procedúry. Procedúry môžu byť umiestnené kdekoľvek v programe, ale z hľadiska prehľadnosti je výhodné umiestniť všetky procedúry na koniec alebo začiatok programu. Príklad procedúry:
Do procedúry môžeme predávať parametre. Volanie procedúry je možné nasledujúcimi riadkami. Všimnite si, že procedúra je volaná iba menom procedúry, pred ktorou je znak &:
Premenná @_ je lokálnou premennou danej procedúry, tak isto premenné $_[0], $_[1], $_[2],.... Je možné definovať ďalšie lokálne premenné. Definovanie lokálnych premenných je výhodné, pokiaľ chceme definovať vstupné parametre. Nasledujúca procedúra hľadá v reťazci podreťazec.
Procedúru je možné upraviť tak, že nahradíme prvé dva riadky riadkom
Doposiaľ sme pre zápis dát na výstup používali príkaz print. Ak však potrebujeme dáta usporiadať do stĺpcov, uviesť hlavičku alebo preložiť pevným textom, použijeme tzv. formátovaný výstup. Vzhľad výstupu je daný predom definovaným formátom. Definíciu formátu je možné uviesť kdekoľvek v programe. Tento druh výstupu uskutočňuje príkaz write.
Definícia formátu začíná slovom format a končí riadkom obsahujúcim len bodku. Príklad definície formátu:
Sekvencia znakov @<<<<<<<<<< definuje vzor pre premennú $meno. Ide o vľavo zarovnaný text, ktorý má 11 znakov.
Definovaný formát sa použije pri výpise príkazom write. Parametrom príkazu write je logické meno výstupného súboru, ktoré je rovnaké ako meno použitého formátu (implicitne). Príklad:
Výsledok pri použití vyššie definovaného formátu:
Všimnite si, že je potrebné pred výstupom otvoriť výstupný súbor, ktorého logické meno je rovnaké ako meno formátu a naplniť premenné použité v definícii formátu. Pri zápise na štandardný výstup pomenujeme formát STDOUT.
Vzory premenných začínajú znakom @. Znaky za znakom určujú druh dát. Počet znakov vrátane znaku @ určuje dĺžku dát.
Knižnice sa používajú v Perl scripte (napr. CGI). Sú uložené v určenom adresári, kde ich interpreter Perlu hľadá. My ich budeme dávať do adresára Perl\lib\. ak chceme v našom scripte volať niektorú z knižnícových procedúr, musíme to zahrnúť do zdrojového textu scriptu, a to príkazom require. Príklad použitia knižnice ctime.pl:
Štandardnou knižnicou pre vytváranie CGI scriptov v jazyku Perl je knižnica cgi-lib.pl Môžete si ju stiahnuť tu. Knižnica obsahuje procedúry:
|