D'ordinaire, les tableaux autorise un accès indexé par des entiers {0,1,2,3,...}. Le premier élément de @fruits est $fruits[0], le second est $fruits[1] et ainsi de suite. Or, en Perl, il est possible de créer des tableaux indexé par une liste de chaîne de caractères. Ce sont les tableaux associatifs.
Pour definir un tableaux associatif, on utilise toujours la même notation, mais le tableau lui-même est préfixé par un %. Par exemple, supposons que nous voulions faire un tableau avec des noms de personnes et leur age respectif. Cela resemblerait à peu près à ça :
%ages = ("Michel Dupont", 39, "Dirty Daniel", 34, "Angelique", 27, "Guillaume", "21 ans de chien", "Jeanne Calment", 121);
Now we can find the age of people with the following expressions
$ages{"Michel Dupont"}; # Renvoie 39 $ages{"Dirty Daniel"}; # Renvoie 34 $ages{"Angelique"}; # Renvoie 27 $ages{"Guillaume"}; # Renvoie "21 ans de chien" $ages{"Jeanne Calment"}; # Renvoie 108
Notez bien que, de même que pour les tableaux, le signe % a été remplacé par $ pour accéder aux valeurs scalaires. Et, contrairement aux tableaux, l'index (ici, le nom de la personne) est entre accolades {}, ce qui rend les tableaux associatifs plus agréables que les tableaux.
Un tableau associatif peut être converti dans un tableau, par simple affectation. Un tableau peut assi être converti en tableau associatif, en l'affectant à un tableau associatif. Idéalement, le tableau aura un nombre pair d'éléments.
@info = %ages; # @info est un tableau. # Il a maintenant 10 élémnts. $info[5]; # Renvoie 27 %autes_ages = @info; # %autes_ages est un tableau associatif. # Il est identique à ages.
Les tableaux associatifs n'ont aucun classement des éléments (c'est juste une hash table), mais il est possibile d'accèder à tous les éléments en utilisant les mots reservés keys et values :
foreach $personne (keys %ages) { print "Je connais l'age de $personne\n"; } foreach $age (values %ages) { print "Quelqu'un a atteint l'age de $age\n"; }
Quand on fait un appel à keys, il renvoie la liste des indices du tableau associatif. Quand values est utilisé, il renvoie la liste des valeurs des éléments. Ces fonctions renvoie leur valeurs dans le même orde, mais cet ordre n'a rien à voir avec l'ordre d'affectation des éléments.
Quand keys et values sont utilisés dans un contexte scalaire, ils renvoie le nombre d'indice/éléments dans le tableau associatif.
Il existe aussi une fonction each (chaque) qui renvoie les couples (indice, valeur).
while (($personne, $age) = each(%ages)) { print "$personne a $age ans\n"; }
Quand vous lancez un programme en Perl, ou n'importe quel script UNIX, il existe un certains nombre de variables d'environnement. Par exemple USER, qui contient votre nom, et DISPLAY qui spécifie le type d'écran utilisé. Quand on lance un programme CGI sur le Web, il existe aussi des variables d'environnement qui contiennent des informations précieuses. Toutes ces variables et leur valeurs sont stockées dans un tableau associatif %ENV, pour le quel, les indices sont les noms des variables. Par exemple :
print "Vous vous appelez $ENV{'USER'}"; print " et vous utilisez $ENV{'DISPLAY'}\n";