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