Asocialtivnφ pole


ObyΦejnΘ pole umo₧nuje p°φstup ke sv²m polo₧kßm pomocφ Φφsla - indexu. Prvnφ prvek pole @food je $food[0]. Druh² prvek je $food[1], atd. Perl navφc umo₧≥uje vytvß°et pole, k jeho₧ polo₧kßm se p°istupuje pomocφ klφΦe - °et∞zce. TakovΘ pole se naz²vß asociativnφ pole.
Asociativnφ pole je pole s indexsekvenΦnφm p°φstupem.

Asociativnφ pole mß prefix %. Jako p°φklad vytvo°φme pole osob a jejich v∞ku.

%ages = ("Michael Caine", 39,
         "Dirty Den", 34,
         "Angie", 27,
         "Willy", "21 psich let",
         "The Queen Mother", 108);
Nynφ m∙₧eme v∞k osob zφskat nßsledujφcφmi v²razy
$ages{"Michael Caine"};		# Vrßtφ 39
$ages{"Dirty Den"};		# Vrßtφ 34
$ages{"Angie"};			# Vrßtφ 27
$ages{"Willy"};			# Vrßtφ "21 psφch let"
$ages{"The Queen Mother"};	# Vrßtφ 108
VÜimn∞te si, ₧e znak % se zm∞nil na znak $, nebo¥ se odkazujeme na jednotlivΘ prvky asociativnφho pole (skalßrnφ prom∞nnΘ). Na rozdφl od b∞₧nΘho pole je index (v tomto p°φpad∞ jmΘno) uzav°eno ve slo₧en²ch zßvorkßch.

Asociativnφ pole je mo₧nΘ konvertovat na b∞₧nΘ pole tak, ₧e p°i°adφme asociativnφ pole prom∞nnΘ typu b∞₧nΘ pole. B∞₧nΘ pole m∙₧e b²t konvertovßno na asociativnφ pole p°i°azenφm k prom∞nnΘ typu asociativnφho pole. V ideßlnφm p°φpad∞ budou mφt ob∞ pole stejn² poΦet prvk∙.

@info = %ages;		# @info je b∞₧nΘ pole o 10 prvcφch
			# 
$info[5];		# Vrßtφ hodnotu 27
			# 
%moreages = @info;	# %moreages je asociativnφ pole
			# Je shodnΘ s polem  %ages


Operßtory

Asociativnφ pole nenφ uspo°ßdanΘ, ale vÜechny prvky pole jsou p°φstupnΘ pomocφ funkce keys a funkce values:
foreach $person (keys %ages)
{
        print "Znam vek $person\n";
        print "$person je stary $ages{$person}\n";
}

print "-------------------------\n";

foreach $age (values %ages)
{
        print "osobe  je $age\n";
}
Funkce keys vracφ seznam klφΦ∙ asociativnφho pole. Funkce values vracφ seznam hodnot pole. Tyto funkce vracφ hodnoty seznamu ve stejnΘm po°adφ, ale nenφ to po°adφ, ve kterΘm byly hodnoty do asociativnφho pole ulo₧eny.

Pokud jsou funkce keys a values volanΘ ve skalßrnφm kontextu, pak vracφ poΦet pßr∙ klφΦ/hodnota v asociativnφm poli. P°φklad volßnφ funkce keys ve skalßrnφm kontextu (porovnßvßnφ s nolou).

if ( keys(%ages) ) {       # if keys () != 0
    print "Asociativni pole je neprazdne\n";
    }
    else   {
    print "Asociativni pole je prazdne\n";
    } 

Existuje takΘ funkce each, kterß vracφ dvouprvkovΘ pole: klφΦ a hodnota. P°i ka₧dΘm volßnφ funkce each vracφ jinou dvojici klφΦ/hodnota:

while (($person, $age) = each(%ages))
{
	print "$person is $age\n";
}


Prom∞nnΘ prost°edφ

Kdy₧ spouÜtφte perlovsk² program nebo UNIXov² script, jsou k dispozici prom∞nnΘ prost°edφ. Kdy₧ spouÜtφte CGI script na WWW, jsou definovanΘ prom∞nnΘ prost°edφ, kterΘ obsahujφ u₧iteΦnΘ informace. VÜechny tyto prom∞nnΘ a jejich hodnoty jsou ulo₧eny v asociativnφm poli %ENV, kde klφΦem je jmΘno prom∞nnΘ. P°φklad:
print "Me jmeno je $ENV{'USER'} a ";
print "pouzivam display $ENV{'DISPLAY'}\n";

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

PEGASNETPEGASNET

PEGASNETPEGASNET

PEGASNETPEGASNET

PEGASNETPEGASNET