Pole


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.


Naplneni pole

Kazdy vyraz v Perlu je vyhodnocovan v nejakem kontextu. Na kontextu zavisi vysledna hodnota vyrazu. Stejny vyraz je v jinem kontextu jinak vyhodnocen. Vyraz muze byt vyhodnocen jako skalar (retezec nebo cislo) nebo jako pole. Perl automaticky konvertuje data do tvaru pozadovaneho aktualnim kontextem.

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.
Mezera muze byt nahrazena jinym retezcem pomoci zmeny specialni promenne $". Tato promenna je jednou z mnoha specialnich promennych, vetsina z nich ma zvlastni jmeno.

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


Vypis pole

Jelikoz je dulezity kontext, muze byt prekvapujici, ze nasledujici prikazy davaji ruzny vysledek:
print @ovoce;	        # vlastni pole
print "@ovoce";	        # Uzavreno v uvozovkach
print @ovoce."";	# Ve skalarnim kontextu

Pole @ARGV

Perl ma vyhrazeno pole @ARGV, ktere obsahuje vsechny parametry zadane na prikazove radce.

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.


Dalsi kapitola | Predchozi kapitola | Obsah