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