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