Obycejne pole umoznuje pristup ke svym polozkam pomoci cisla - indexu.
Prvni prvek pole @food je $food[0]. Druhy prvek je $food[1],
atd.
Perl navic umoznuje vytvaret pole, k jehoz polozkam se pristupuje pomoci klice - retezce.
Takove pole se nazyva asociativni pole.
Asociativni pole je pole s indexsekvencnim pristupem.
Asociativni pole ma prefix %. Jako priklad vytvorime pole osob a jejich veku.
%ages = ("Michael Caine", 39, "Dirty Den", 34, "Angie", 27, "Willy", "21 psich let", "The Queen Mother", 108);Nyni muzeme vek osob ziskat nasledujicimi vyrazy
$ages{"Michael Caine"}; # Vrati 39 $ages{"Dirty Den"}; # Vrati 34 $ages{"Angie"}; # Vrati 27 $ages{"Willy"}; # Vrati "21 psich let" $ages{"The Queen Mother"}; # Vrati 108Vsimnete si, ze znak % se zmenil na znak $, nebot se odkazujeme na jednotlive prvky asociativniho pole (skalarni promenne). Na rozdil od bezneho pole je index (v tomto pripade jmeno) uzavreno ve slozenych zavorkach.
Asociativni pole je mozne konvertovat na bezne pole tak, ze priradime asociativni pole promenne typu bezne pole. Bezne pole muze byt konvertovano na asociativni pole prirazenim k promenne typu asociativniho pole. V idealnim pripade budou mit obe pole stejny pocet prvku.
@info = %ages; # @info je bezne pole o 10 prvcich # $info[5]; # Vrati hodnotu 27 # %moreages = @info; # %moreages je asociativni pole # Je shodne s polem %ages
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 vraci seznam klicu asociativniho pole. Funkce values vraci seznam hodnot pole. Tyto funkce vraci hodnoty seznamu ve stejnem poradi, ale neni to poradi, ve kterem byly hodnoty do asociativniho pole ulozeny.
Pokud jsou funkce keys a values volane ve skalarnim kontextu, pak vraci pocet paru klic/hodnota v asociativnim poli. Priklad volani funkce keys ve skalarnim kontextu (porovnavani s nolou).
if ( keys(%ages) ) { # if keys () != 0 print "Asociativni pole je neprazdne\n"; } else { print "Asociativni pole je prazdne\n"; }
Existuje take funkce each, ktera vraci dvouprvkove pole: klic a hodnota. Pri kazdem volani funkce each vraci jinou dvojici klic/hodnota:
while (($person, $age) = each(%ages)) { print "$person is $age\n"; }
print "Me jmeno je $ENV{'USER'} a "; print "pouzivam display $ENV{'DISPLAY'}\n";