Proměnná typu pole je seznam skalárních proměnných (čísel, řetězců).
Jméno proměnné typu pole má stejný formát jako skalární proměnná, jako prefix má však znak
@
. Příkazy
@ovoce = ("jablka", "hrusky", "svestky"); @barvy = ("cervena", "modra");přiřazují seznam tří prvků do proměnné pole @ovoce a seznam dvou prvků do proměnné @barvy.
Prvky pole jsou přístupné pomocí indexu (začínajícího od 0) uzavřeného v hranatých závorkách. Výraz
$ovoce[2]vrací hodnotu svestky. Všimněte si, že znak @ se změnil na znak $, protože ovoce[2] tj. prvek pole je skalární proměnná.
Nejpve si ukažme přiřazení v kontextu pole.
První přiřazení nahradí proměnnou @barvy jejím obsahem, tedy oba příkazy mají stejný výsledek.
@vicebarev = ("bila", @barvy, "cerna"); @vicebarev = ("bila", "cervena", "modra", "cerna");Vhodný způsob přidání prvku do pole je použití funkce push:
push(@ovoce, "tresne");která přidá řetězec tresne na konec pole @ovoce. K přidání dvou nebo více prvků do pole použijte např.
push(@ovoce, "tresne", "broskve"); push(@ovoce, ("tresne", "broskve")); push(@ovoce, @dalsiovoce);Funkce push vrací poslední prvek nového 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 odstraní poslední položku pole a vrací hodnotu poslední položky pole.
Z našeho původního seznamu
@ovoce = ("jablka", "hrusky", "svestky");
funkce
pop vrátí
svestky a pole @ovoce má nyní dva prvky:
$noveovoce = pop(@ovoce); # nyní $noveovoce = "svestky"
Přiřazení v kontextu skalární proměnné.
Řádek
$f = @ovoce;přiřadí proměnné $f hodnotu určující délku pole @ovoce tj. hodnotu 3, ale
$f = "@ovoce";přiřadí proměnné $f řetězec obsahující prvky seznamu oddělené mezerami tj řetězec jablka hrusky svestky.
Při přiřazování je možné použít pole spolu se skalárními proměnnými:
($a, $b) = ($c, $d); # TJ. $a=$c; $b=$d; ($a, $b) = @ovoce; # $a a $b jsou první dva prvky pole # @ovoce. ($a, @jineovoce) = @ovoce; # $a je první prvek pole @ovoce # @jineovoce je seznam dalších prvků # (@jineovoce, $a) = @ovoce; # @jineovoce je @ovoce a # $a je nedefinované.Poslední případ nastane, neboť do pole @jineovoce je možné vložit mnoho prvků. Proto je lépe takovéto přiřazení nepoužívat.
Konečně můžeme chtít získat index posledního prvku pole . Pro pole @ovoce použijeme výraz
$#ovoce
print @ovoce; # vlastní pole print "@ovoce"; # Uzavřeno v uvozovkách print @ovoce.""; # Ve skalárním kontextu
Cvičení
Porovnejte výsledky předchozích tří příkazů pro tisk.
Příklad 2a:
Naplňte pole jmena hodnotami: Jan, Josef, Lada, Michal, Renata.
Naplňte pole vek hodnotami: 16, 10, 12, 15, 17.
Vypište postupně věty: Vek osoby ... je ... let, pro každou dvojici.
Spočítejte a vypište průměrný věk osob.
Vypište poslední prvek pole pomocí indexu $#jmena.
Spusťte script s argumentem, který určuje pořadové číslo pole. Odpovídající pole vytiskněte. Jedno z možných řešení.