Promenna typu pole je seznam skalarnich promennych (cisel, retezcu).
Jmeno promenne typu pole ma stejny format jako skalarni promenna, jako prefix ma vsak znak
@
. Prikazy
@ovoce = ("jablka", "hrusky", "svestky"); @barvy = ("cervena", "modra");prirazuji seznam tri prvku do promenne pole @ovoce a seznam dvou prvku do promenne @barvy.
Prvky pole jsou pristupne pomoci indexu (zacinajiciho od 0) uzavreneho v hranatych zavorkach. Vyraz
$ovoce[2]vraci hodnotu svestky. Vsimnete si, ze znak @ se zmenil na znak $, protoze ovoce[2] tj. prvek pole je skalarni promenna.
Nejpve si ukazme prirazeni v kontextu pole.
Prvni prirazeni nahradi promennou @barvy jejim obsahem, tedy oba prikazy maji stejny vysledek.
@vicebarev = ("bila", @barvy, "cerna"); @vicebarev = ("bila", "cervena", "modra", "cerna");Vhodny zpusob pridani prvku do pole je pouziti funkce push:
push(@ovoce, "tresne");ktera prida retezec tresne na konec pole @ovoce. K pridani dvou nebo vice prvku do pole pouzijte napr.
push(@ovoce, "tresne", "broskve"); push(@ovoce, ("tresne", "broskve")); push(@ovoce, @dalsiovoce);Funkce push vraci posledni prvek noveho seznamu. Tedy:
@ovoce = ("jablka", "hrusky", "svestky"); @dalsiovoce = ("jahody","maliny"); $pocet = push(@ovoce, @dalsiovoce); print "Posledni prvek noveho seznamu je $pocet\n"; # tiskne maliny
Funkce pop odstrani posledni polozku pole a vraci hodnotu posledni polozky pole.
Z naseho puvodniho seznamu
@ovoce = ("jablka", "hrusky", "svestky");
funkce
pop vrati
svestky a pole @ovoce ma nyni dva prvky:
$noveovoce = pop(@ovoce); # nyni $noveovoce = "svestky"
Prirazeni v kontextu skalarni promenne.
Radek
$f = @ovoce;priradi promenne $f hodnotu urcujici delku pole @ovoce tj. hodnotu 3, ale
$f = "@ovoce";priradi promenne $f retezec obsahujici prvky seznamu oddelene mezerami tj retezec jablka hrusky svestky.
Pri prirazovani je mozne pouzit pole spolu se skalarnimi promennymi:
($a, $b) = ($c, $d); # TJ. $a=$c; $b=$d; ($a, $b) = @ovoce; # $a a $b jsou prvni dva prvky pole # @ovoce. ($a, @jineovoce) = @ovoce; # $a je prvni prvek pole @ovoce # @jineovoce je seznam dalsich prvku # (@jineovoce, $a) = @ovoce; # @jineovoce je @ovoce a # $a je nedefinovane.Posledni pripad nastane, nebot do pole @jineovoce je mozne vlozit mnoho prvku. Proto je lepe takoveto prirazeni nepouzivat.
Konecne muzeme chtit ziskat index posledniho prvku pole . Pro pole @ovoce pouzijeme vyraz
$#ovoce
print @ovoce; # vlastni pole print "@ovoce"; # Uzavreno v uvozovkach print @ovoce.""; # Ve skalarnim kontextu
Cviceni
Porovnejte vysledky predchozich tri prikazu pro tisk.
Priklad 2a:
Naplnte pole jmena hodnotami: Jan, Josef, Lada, Michal, Renata.
Naplnte pole vek hodnotami: 16, 10, 12, 15, 17.
Vypiste postupne vety: Vek osoby ... je ... let, pro kazdou dvojici.
Spocitejte a vypiste prumerny vek osob.
Vypiste posledni prvek pole pomoci indexu $#jmena.
Spustte script s argumentem, ktery urcuje poradove cislo pole. Odpovidajici pole vytisknete. Jedno z moznych reseni.