PERL – zrodený pre tvorbu CGI skriptov

6. června 2000

Dnes sa zoznámte sa s jedným z najlepších server-side internetovým jazykom – Perlom. Perl je najrozšírenejší a schopnasťami najsilnejší jazyk pre CGI (Common Gateway Interface). Jeho meno je skratka Practical Extraction and Report Language.

Na to aby sme vôbec s Perlom mohli začať potrebujeme web-server, browser, editor a samotný Perl. Editor odporúčam EditPlus. Teraz vám popíšem postup inštalácie Perlu na webserveri Apache. Predpokladám, že už máte Apache nainštalovaný a spojazdnený. V súbori C:\…\Apache\conf\httpd.cont si nájdeme tento riadok:

<Directory „C:/HTML/WWWARoot“>

kde C:/HTML/WWWARoot je DocumentRoot. Pod týmto riadkom by sa malo nachádzať riadok začínajúci Options… My tento riadok upravíme na

Options Indexes FollowSymLinks MultiViews ExecCGI

Ak chcem aby sa cgi spúšťali iba z adresára cgi-bin, tak pridáme toto:

<Directory „C:/HTML/WWWARoot/cgi-bin“>
AllowOverride None
Options ExecCGI
</Directory>

Odporúčam však prvý variant. Tak sa nám bude spúšťať cgi z hociktorého adresára v DocumentRoot. Toto všetko nám nepomôžeme ak ešte neodhashujeme riadok (odstránime # zo začiatku riadka):

AddHandler cgi-script .cgi .pl

Konconku .pl pridávame pretože aj tú niektorý ludia používajú. Vy si radšej zvyknite na .cgi.

Hello, world!
V tomto článku začneme legendárnym „Hello, world!“. Skôr než sa pustíme do nášho prvého „programu“, musíme si vysvetliť dve najdôležitejšie veci: prvý riadok a hlavičku. Prvý riadok nám udáva umiestnenie programu čiže aj jazyk v ktorom je písaný skript, pretože ako všetci vieme existujú aj iné jazyky pre cgi ako Perl. Tento riadok vždy načína písmenami #! a pokračuje adresou programu, ktorý skript spracuje. Takže doma to bude vyzerať asi takto:

#!C:\Pert\bin\perl.exe

Ak sa vám to zdá príliš dlhé vždy písať tak si do súboru autoexec.bat pridajte riadok:

SET PATH=C:\PERL\BIN;“%PATH%“

Tento riadok by sa tam však po inštalácii mal pridať sám. Teraz prvý riadok v skripte bude vyzerať takto:

#!perl

Hneď je to lepšie. Teraz môžeme prejsť k druhej najdôležitejšej veci ktorou je hlavička. Hlavička má za úlohu informavať klienta o aký typ dát ide, čiže mime type a podobné veci. S hlavičkou sa stretneme aj v e-mailoch ale o tom neskôr. Najčastejším parametrom hlavičky je Content-Type, ktorý má za úlohu určiť typ dát. My si ukážeme typy pre textové údaje. Ak chceme aby sa výsledok zobrazil ako obyčajný text, teda nie html, bude to vyzerať nasledovne:

Content-Type: text/plain

Ak chceme výstup vo formáte html tak:

Content-Type: text/html

Ak nezadáme hlavičku, Apache vyhodí error. Nesmieme zabudnú, že za hlavičkou nasleduje prázdny riadok teda dva entery. A teraz konečne náš prvý skript:

#!perl
print „Content-Type: text/html\n\n“;
print „Hello, world!“;

Súbor si uložíme do DocumentRoot a browseri spustíme http://localhost/pokus1.cgi. Ak chceme náš skript vyskúšať na serveri, čiže niekde inde než doma (predpokladám, že doma nemáte server) stretneme sa pravdepodobne s nejedným problémom:

Server má Perl uložený v inom adresári ako my doma. Najčastejšie je to /usr/local/bin/perl alebo /usr/bin/perl. Takže zmeníme prvý riadok na správnu adresu. Samozrejme, že toto platí iba pre niektoré serveri a Unixom. Súbor nemá vlastnosti ako skript. Táto vlastnosť sa dá nastaviť v každom dobrom ftp klientovi (napr. LeechFTP, ktorý je zadarmo). Ak takýto ftp máme nastavíme vlastnosti skriptu aj na Exec. Skript nieje v adresári cgi-bin. Tento adresár sa na skripty používa najčastejšie.

Nekompatibilita formátov systémov. Určite ste sa stretli s textom, v ktorom sa nesprávne zobrazoval entery a iné znaky. Tento text však na Unixoch vyzerá normálne. To isté platí, keď text napíšete vo Windowse a prezriete v Unixe. Preto musíme zmeniť formát textu nášho skriptu na Unixovský, čo však nedokáže každý program, takže preto odporúčam EditPlus.

V našom-vašom prvom skripte sme sa zoznámili aj s prvým príkaz print. Jeho úlohou nieje nič iné ako vypísať text. Skôr ako sa pustíme do niečoho zložitejšieho, je dobré keď si priamo v skripte robíme poznámky čo na čo slúži, aby sme neskôř nemali v zdrojáku chaos. Tieto poznámky alebo tzv. comment sa oddeluje od zdrojáka tým, že na začiatku riadka je mriežka (#). Comment končí na konci riadku. Aj tu je niekoľko výnimiek kedy mriežka nemá úlohu oddeliť zdroják od poznámok: v prvom riadku kedy za mriežkou nasleduje výkričník, v regulérnych výrazoch, v stringu (reťazci)…

Skalárne premenné
Skalárne premenné sú najjednoduchším typom premennej. Do skalárnych premien môžeme ukladať čísla alebo reťazce (text). Skalárne premenné sa definujú pri ich prvom použití. Pre lepšiu orientáciu má iný typ premennej inú syntaxu. Skalárne premenné začínajú znakom $. Podľa obsahu skalárnej premennej si Perl sám zistí o aký typ ide. Tu sú typy, ktoré dokáže Perl spracovať:

$x=10; #integer (celé číslo)
$y=1.123; #desatinné číslo
$z=3.45e78; #vedecké číslo
$a=’ahoj‘; #reťazec
$b=“$a“; #reťazec obsahujúci premennú $a
$c=`user`; #príkaz
Tu si všimnite rozdiel v použití uvodzoviek. Ak použijete dvojité uvodzovky („), tak nájdené premenné sú vymenené za ich hodnotu. Ale pri jednoduchých uvodzovkách (‚) sa text berie ako konštanta, takže hoci text bude obsahovať $x Perl nebude $x vymieňať za jeho hodnotu. Meno premennej sa môže sklaďať s písmen, číslic a podtržníkom (_), no nesmie začínať číslom. Pri vytváraní premenných si treba zo začiatku dať pozor na špeciálne premenné (najčastejšia $_) aby sme nevytvorili niečo čo už existuje a má inú hodnotu ako potrebujeme. A ešte jedna vec: Perl je case sensitive – $x nieje $X.

Operátory:
Číselné operátory:

$a = 1 + 2; # sčítavanie
$a = 2 – 1; # odpočítavanie
$a = 2 * 2; # násobenie
$a = 3 / 2; # delenie, výsledok 1.5
$a = 5 ** 2; # umocní 5 na 2
$a = 5 % 2; # zbytok po delení (mod)
++$a; # zvýší hodnotu $a o jednu a vrátí jej hodnotu
$a++; # vráti hodnotu $a a zvýší hodnotu $a o jednu
–$a; # zníži hodnotu $a o jednu a vrátí jej hodnotu
$a–; # vráti hodnotu $a a zníži hodnotu $a o jednu
$a = 3; # priradí hodnotu
$a += $b; # pripočíta $b do $a
$a -= $b; # odpočíta $b od $a

Textové operátory:

$a = $b . $c; # spojí $b a $c
$a = $b x $c; # opakuje reťazec $b $c krát
$a .= $b; # doplní $b k $a

Pole
Druhá premenná pole je zoznam skalárnych premenných. Ako som spomínal iná premenná, iná syntaxa, preto namiesto dolára sa pred meno pola dáva zavináč napr.: @pole. Pole definujeme nasledovne:

@mena = („Jano“, „Palo“, „Cicvor“);

Pole @mena bude mať tri prvky Jano, Palo a Cicvor. Prvky z pola načítame podľa indexu – číslo pod ktorým bol prvok uložený. Pole sa indexuje od nuly. Nasledujúci príklad vypíše všetky tri prvky pola.

@mena = („Jano“, „Palo“, „Cicvor“); print $mena[0]; print $mena[1]; print $mena[2];

Ak pozorne čítate. tak ste si určite všimli, že pri čítaní z pola som namiesto zavináča použil opäť dolár, pretože keď udávame index už neide o pole, ale o skalárnu premennú. Tento príklad je však zdĺhavé ak chceme vypísať všetky prvky pola. Je tu aj jednoduchší postup:

print „@mena“;

Všimnite si prosím, že pole je uzavrené v uvodzovkách. Uvodzovky spôsobia oddelenie prvkov medzerou. Ak však pole nieje v uvodzovkách, tak by sa prvky pola budú oddelovať špeciálnou premennou $, o ktorých si povieme inokedy. Nasledujúci príklad demonštruje inú variantu použitia bez uvodzoviek:

$pocet = @mena;

Premenná $pocet bude obsahovať počet prvkov v poli @mena. Index posledného prvku pola získame nasledovne:

$#mena

Hodnota je o jednu menšia, pretože polia sa indexujú od nuly. Neraz sa vám stane, že budete potrebovať jedno pole pridať k druhému. Riešenie je jednoduché:

@mena = (@mena, @dalsiemena)

Práca s poliami
Pracovať so samotným polom len pomocou indexov by bolo ťažké a zdĺhave. Preto nám prichádzajú na pomoc funkcie pre polia.

push

@mena = („Jano“, „Palo“, „Cicvor“); $pocet = push(@mena, „Superman“);

Prvá funkcia je určená na pridávanie prvkov do pola. Push pridá do pola @mena prvok Superman a vráti počet prvkov v poli. V našom príklade 4.

pop
Keď už vieme niekoľko postupov ako pridávať prvky do pola, naučme sa aj ako ich mazať.

@mena = („Jano“, „Palo“, „Cicvor“); $meno = pop(@mena);

Funkcia pop odstráni posledný prvok pola a vráti jeho hodnotu. V našom príklade Cicvor.

shift

@mena = („Jano“, „Palo“, „Cicvor“); $meno = shift(@mena);

Funkcia shift podobne ako funkcia pop skráti pole o jeden prvok a vráti jeho hodnotu, ale tentokrát zľava teda od začiatku. $meno bude Jano.

scalar

@mena = („Jano“, „Palo“, „Cicvor“); $pocet = scalar(@mena);

Funkcia scalar vracia počet prvkov v poli. $pocet bude 3.

join

$text=join(„, „, @mena);

Funkcia join spojí prvky pola a oddelí ich textom, ktorý je v prvom parametri. $text bude Jano, Palo, Cicvor.

Toto by vám na začiatok malo stačiť. Nezabúdajte, že najlepšie sa naučíte spôsobom pokus-omyl. Nabudúce sa dozviete niečo o najväčších zbraniach Perlu.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *