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í 108Vš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
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"; }
print "Me jmeno je $ENV{'USER'} a "; print "pouzivam display $ENV{'DISPLAY'}\n";