Dátové typy
Na rozdiel od niektorých programovacích jazykov má Perl relatívne malý počet dátových typov. Implementuje tri základné dátové typy - skalár, pole skalárov a hashe skalárov(asociatívne pole). V Perli sa vyskytujú aj špeciálne dátové typy ako typeglob a podprogramy.
| Typ | Znak | Príklad | Označenie pre... |
|---|---|---|---|
| Skalár | $ |
$meno_skalára |
Jednotlivá hodnota (číslo, reťazec) |
| Pole | @ |
@meno_poľa |
Pole hodnôt indexovaných číselne |
| Hash | % |
%meno_hashu |
Pole hodnôt indexovaných reťazcom |
| Podprogram | & |
&meno_podprogramu |
Voliteľný úsek programu v Perle |
| Typeglob | * |
*meno_typeglob |
Čokoľvek pomenované ako meno_typeglob |
Skalár
Skalár je základný dátový typ a tvoria sa z neho ostatné, zložitejšie dátové typy. Skalár obsahuje vždy práve jednu hodnotu, ktorou je reťazec, číslo alebo odkaz na iné údaje. Perl nerozlišuje či v premennej je číslo, reťazec, prípadne celé alebo desatinné číslo. To znamená, že v jednom okamihu je možné s takouto premennou zaobchádzať ako s číslom a inokedy ako s reťazcom.
Niekoľko príkladov obsahu skalárnej premennej:
| $odpoved = 42; | # celé číslo |
| $pi = 3.141592654; | # reálne číslo |
| $projekt = "LAMP technológia"; | # reťazec |
| $veta = "Náš projekt je $projekt"; | # reťazec s vložením |
| $x = $foo * $bar; | # výraz |
Za normálnych podmienok nie je nutné explicitne deklarovať premenné. Na deklaráciu sa používa príkaz my. Syntax potom vyzerá takto:
| my $foo; | # deklarácie jednej premennej bez priradenia |
| my ($odpoved,$otazka); | # deklarácia viacerých premenných |
| my $bar='LAMP'; | # deklarácie jednej premennej s priradením |
Pole
Pole je definované ako zoznam skalárnych hodnôt, ktoré sú radené za sebou. Týmto skalárnym hodnotám v poli hovoríme prvky.
Prvok je určený indexom a obsahuje hodnotu. Index je číslo. 1. indexom je nula, dalším 1 atď. Pole označujeme znakom @.
Ale na označenie jednotlivých prvkov poľa používame znak $
Dĺžka poľa je daná počtom prvkov v poli.
| @zoznam = ('rum','cola','lad','pohar'); | # exaktne definované pole naplnené skalármi |
| ($alkohol,$nealko,$lad,$vec) = @zoznam; | # pole priradené do iného poľa skalárnych premenných |
| ($foo,$bar) = ($bar,$foo); | # výmena hodnôt medzi dvoma poľami |
Operácie s poľom
Pole vytvoríme rovnako ako skalárnu premennú - priradením. Ľavý operand je identifikátor, ktorý začína zavináčom a na pravo su uvedené v okrúhlych zátvorkách hodnoty jednotlivých prvkov, oddelené čiarkami.
@pole = ("prva_hodnota", "druha_hodnota", "tertia_hodnota");
Takto sme vytvorili trojprvkové pole. Nasledujúca tabuľka nám určuje jeho štruktúru:
| Index | Hodnota |
| 0 | prva_hodnota |
| 1 | druha_hodnota |
| 2 | tretia_hodnota |
Ak chceme získať hodnotu prvku @pole s indexom x, zápis je následujúci:
$pole[x]
Tu si ale musíme dať pozor, prvok pole je skalárom a označuje sa dolárom $.
Nasledujúcim spôsobom získame prvky z poľa @pole.
print "Prvok 0: $pole[0]\n";
print "Prvok 1: $pole[1]\n";
print "Prvok 2: $pole[2]\n";
Výpis predchádzajúceho príkladu
Prvok 0: prva_hodnota
Prvok 1: druha_hodnota
Prvok 2: tretia_hodnota
Funkcie pre prácu s poľom
Pre prácu s poliami sú v Perli preddefinované rôzne funkcie. Pomocou funkcie push je možné na koniec daného poľa pridať zadaný zoznam prvkov.
Funkcia unshift pridáva prvky na začiatok daného poľa. Dĺžka poľa sa o daný počet prvkov zvýši a je vrátená ako návratová hodnota týchto funkcií.
@pole = (1, 2, 3);
print push @pole, 10; # vypíše hodnotu 4, @pole obsahuje prvky 1, 2, 3, 10
print unshift @pole, 20; # vypíše hodnotu 5, @pole obsahuje prvky 20, 1, 2, 3, 10
Pre odobratie jedného prvku z poľa slúžia funkcie pop a shift.
Pop odoberie a vráti prvok z konca poľa, shift odoberie a vráti prvok poľa zo začiatku.
V obidvoch prípadoch sa dĺžka poľa zkráti o jeden prvok.
@pole = (1, 2, 3, 4, 5);
print pop @pole, 10; # vypíše hodnotu 5, @pole obsahuje prvky 1, 2, 3, 4
print shift @pole, 20; # vypíše hodnotu 1, @pole obsahuje prvky 2, 3, 4
Vďaka týmto funkciám a vlastnostiam polí v Perli môžeme implementovať dátové štruktúry front a zásobník.
Dvojice funkcií push a pop alebo unshift a shift slúžia pre prácu s poľom ako so zásobníkom.
Dvojice funkcií push a shift alebo unshift a pop umožňujú s poľom pracovať ako s frontom.
Funkcia splice pracuje s viacerými prvkami poľa naraz a tieto prvky sa nemusia nachádzať na začiatku alebo na konci daného poľa.
Funkcia zo zadaného poľa vezme zadaný počet prvkov na zadanej pozícii a nahradí ich zadaným zoznamom hodnôt.
Ak hodnoty udávajúce počet prvkov, ktoré sa majú nahradiť, alebo počet prvkov, ktoré sa majú vložiť, sú nulové, tak v tom prípade dochádza len ku vloženiu resp. odobratiu prvkov z poľa.
@pole = (1, 2, 3, 4, 5);
splice @pole, 2, 2, 'a', 'b', 'c'; # z pole @pole odoberieme 2 prvky (3. s 4.) od indexu 2 a vložíme hodnoty a, b, c
1, 2, a, b, c, 5; # obsah poľa @pole
splice @pole, 3, 1; # z pole @pole odoberieme od indexu 3 jeden prvok ('b') a ničím nenahradzujeme
1, 2, a, c, 5; # obsah poľa @pole
splice @pole, 1, 0, 'x', 'y'; // z pole @pole od indexu 1 odstránime 0 prvkov a vložíme prvky x a y
1, x, y, 2, a, c, 5; # obsah poľa @pole
Usporiadanie prvkov poľa podľa abecedy je v jazyku Perl veľmi jednoduché. Funkcia sort uspriadáva(implicitne) prvky podľa ASCII tabuľky.
Funkcia reverse obracia poradie prvkov poľa. Posledný prvok prehodí s prvým, predposledný s druhým atď.
@p = qw(a g d f e b c); # neusporiadaný zoznam
print @p; # výpis poľa @p: agdfebc
@p = sort @p; # použitie funkcie sort
print @p; # výpis po použití funkcie sort: abcdefg
@p = reverse @p; # použitie funkcie reverse
print @p; # výpis po použití funkcie reverse: gfedcba
Takýto systém porovnávania porovnáva znak po znaku, zľava doprava, takže 6 je väčšie ako 44. Z tohto hľadiska sa tento zápis nedá použiť na čísla.
Hash
Hash je plne asociatívny zoznam, kedy pomocou jedného skaláru (identifikátora) môžeme pristupovať k položke zoznamu.
Príklad zápisu:
%menoDna =< (
'Po' => 'Pondelok';
'Ut' => 'Utorok';
'Str' => 'Streda';
'Stv' => 'Stvrtok';
)
Tento uvedený spôsob sa v praxi viac využíva z dôvodu, že je prehľadnejší. Využíva znamienko =>, kedy pred znamienko sa dáva kľúč a za znamienko sa dáva hodnota.
Na získanie hodnoty z hash využívame $, lebo návratová hodnota je skalárna:
| $menoDna{'Po'} | # vráti hodnotu Pondelok |

