Pole


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ß.


Napln∞nφ pole

Ka₧d² v²raz v Perlu je vyhodnocovßn v n∞jakΘm kontextu. Na kontextu zßvisφ v²slednß hodnota v²razu. Stejn² v²raz je v jinΘm kontextu jinak vyhodnocen. V²raz m∙₧e b²t vyhodnocen jako skalßr (°et∞zec nebo Φφslo) nebo jako pole. Perl automaticky konvertuje data do tvaru po₧adovanΘho aktußlnφm kontextem.

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.
Mezera m∙₧e b²t nahrazena jin²m °et∞zcem pomocφ zm∞ny specißlnφ prom∞nnΘ $". Tato prom∞nnß je jednou z mnoha specißlnφch prom∞nn²ch, v∞tÜina z nich mß zvlßÜtnφ jmΘno.

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


V²pis pole

Jeliko₧ je d∙le₧it² kontext, m∙₧e b²t p°ekvapujφcφ, ₧e nßsledujφcφ p°φkazy dßvajφ r∙zn² v²sledek:
print @ovoce;	        # vlastnφ pole
print "@ovoce";	        # Uzav°eno v uvozovkßch
print @ovoce."";	# Ve skalßrnφm kontextu

Pole @ARGV

Perl mß vyhrazeno pole @ARGV, kterΘ obsahuje vÜechny parametry zadanΘ na p°φkazovΘ °ßdce.

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φ.


DalÜφ kapitola | P°edchozφ kapitola | Obsah