03 - Premenne v Perle
V predchadzajucej casti som uviedol par veci tykajucich sa literalov - faktov, ktore sa nemenia za behu programu. Vacsinou vsak asi kazdy bude potrebovat udaje za behu programu menit - a prave na to je vhodne pouzit premenne :) Perl pozna tri zakladne typy premennych, ktore sa lisia svojim spravanim a obsahom, ktory im moze byt priradeny :- Skalary - obsahuju naraz vzdy len jeden udaj (cislo alebo retazec). ! VZDY ! zacinaju znakom $
- Polia - obsahuju zoznamy viacerych prvkov (cisla,retazce,polia). ! VZDY ! zacinaju znakom @
- Asociativne polia - polia s vynikajucim sposobom indexovania. ! VZDY ! zacinaju znakom %
Skalarne premenne
Skalarna premenna sama o sebe nie je velmi zaujimava a narocna. Zlozitejsie veci sa objavia az pri jej pouziti v dvojitych uvodzovkach - teda pri vypise retazcov.Priklad (meno premennej):
        $pocetIzieb
        $premenna
Priklad (priradenie a pouzitie hodnoty premennej)::
        $pocetIzieb = 20;
        $pocetIzieb = $pocetIzieb + 5;
        $premenna = "s priradenym textom";
Polia
Polia pouziva Perl na ulozenie zoznamov. Moze sa do nich ulozit uplne vsetko - nezalezi ako skombinujeme jeho prvky, je jedno akeho su typu.Definovanie pola
@pole;<---
pole, ktoreho hodnota zatial nebola definovana
( );<---
prazdne pole
@cisla = (12, 014, 0x0c, 34.34, 23.3E-3);
@retazce = ("toto","je","pole","stringov");
@mix = ("cervena",67,"jablko",8,0,"pocitac");
@pismena = ("A".."Z");<---
obsahuje vsetky pismena od "A" po "Z"
Upozornenie: Pouzitie poli s obsahom ( ( 1 , 2 , 3 , 4 ) , ( 5 , 6 , 7 , 8 ) ) a ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) je uplne ekvivalentne.
Perl vlozi prvky vnoreneho pola do hlavneho !
Praca s prvkami pola
Zadefinujme si jednoduche pole, ktore bude ako jednotlive polozky obsahovat mena mojich spolubyvajucich:
@spolubyvajuci = qw (Miso,Lubos,Marjan);         #   qw uzavrie kazdy prvok zoznamu do uvodzoviek
$spolubyvajuci[0];        # ukazuje v mojom zozname na polozku Miso
$spolubyvajuci[1];        # ukazuje v mojom zozname na polozku Lubos
$spolubyvajuci[2];        # ukazuje v mojom zozname na polozku Mrajan
$spolubyvajuci[3] = "Lubo";        # prida do zoznamu noveho spolubyvajuceho
Upozornenie: Aj ked sa meno pola musi vzdy zacinat znakom @ , pri jednotlivych prvkoch sa pouziva na zaciatku znak $ !
Upozornenie: V Perle je mozne pouzit vramci pola aj negativne indexy. Zapis $spolubyvajuci[-1]; je teda korektny a nevrati chybu! ( Pri indexovani je pouzita funkcia modulo. )
Upozornenie: Index pola zacina vzdy od cisla 0 . Da sa to zmenit pomocou specialnej premennej $[. Ak do nej priradim cislo 5, tak index pola bude zacinat od cisla 5.
Zistenie poctu prvkov pola
V Perle sa spravanie jednotlivych prvkov jazyka lisi od kontextu v akom je dany prvok pouzity. Je to tak aj pri poliach. Tato vlastnost sa specificky vyuziva na zistenie poctu prvkov pola. (Vzdy ked je pole pouzite v skalarnom kontexte, tak je vratena velkost a nie zoznam prvkov.)
@pole = (11,22,13,47,55,69);
$pocetPrvkov = @pole;        # $pocetPrvkov obsahuje odteraz cislo 6
Vypis prvkov pola
@pole = (1..5);
print @pole;
Tento maly kusok kodu vypise na vystup 12345  , neobjavia sa tam ziadne medzery ani ine oddelovace jednotlivyvh prvkov. Ak chceme jednotlive prvky oddelit musieme to urobit nasledovne:
print "@pole\n";
Vo vystupe sa po tomto prikaze objavia znaky 1  2  3  4  5  oddelene medzerou. Ak chceme pouzit iny znak na oddelenie prvkov, musime pouzit specialnu premennu $".
$" = ",";
print "@pole\n";       # vypise 1,2,3,4,5
Tak a este zostala jedna dolezita vec suvisiaca s dvojitymi uvodzovkami. Predstavme si, ze mame premennu obsahujucu moje meno a ze sa ju pokusim vypisat v nasledovnom tvare:
$meno = "Lubo";
print "To je $menov pocitac";
Vystup bude To je pocitac. Perl sa totiz pokusi najst premennu $menov, co zrejme nie je moj umysel - chcel som totiz vypisat "To je Lubov pocitac". Takze ako na to? Su dve zakladne moznosti:
- Pouzit operator konkatenacie retazcov (bodka)
----->
 print "To je "  .  $meno  . "v pocitac";- Ohranicit nazov premennej pomocou { }  
----->
 print "To je ${meno}v pocitac";
Asociativne polia (HASH)
Tak a konecne nadisiel cas spomenut nieco o skvelom nastroji, ktory nam ponuka Perl. Su nim asociatine polia. Ich definovanie a praca s nimi sa velmi nelisi od obycajnych poli. Maju vsak oproti nim jednu velku vyhodu - mozu pouzit akykolvek skalarny datovy typ ako index. Toto je aj hlavny rozdiel v ktorom sa lisia - kazda hodnota v asociativnom poli musi mat priradeny svoj index.%asociativnePole = ("Fero","Dec 2","Jozo","jun 4","Peto","Feb 15");       # vytvorenie pola s 3 prvkami - klucom je meno a hodnotou je datum
$asociativnePole{"Lubo"} = "Nov 27";       # pridanie dalsieho prvku do pola
Vypis prvku asociativneho pola nie je celkom trivialny - v retazci uzavretom v dvojitych uvodzovkach totiz maju kucerave zatvorky specialny vyznam. Tu nam pomoze jedine operator konkatenacie stringov - oznacuje sa ako obycajna bodka.
print "Fero sa narodil: "  .  $asociativnePole{"Fero"}  .  "n\";