Les tableaux associatifs
Ce type de données permet d'indiquer une liste de données avec des clefs et des valeurs leurs étant associés. La déclaration de se type se fait de la façon suivante:
my %array; |
On peut définir les valeurs immédiatement comme ceci :
my @array = ('valeur1', 'valeur2', 'valeur3'); |
On peut associé des clefs à chacune des valeurs comme ceci :
my %hash = ('clé1' => 'valeur1', 'clé2' => 'valeur2', 'clé3' => 'valeur3'); |
Vous remarquerez que la liste est entouré de parenthèses rondes afin d'indiquer la création d'un tableau dans des cellules mémoires continues. On peut définir des pointeurs (aussi appelé référence) sur chacune des valeurs :
my $ref_array = ['valeur1', 'valeur2', 'valeur3']; |
Vous remarquerez que la liste est entouré de parenthèses carrés afin d'indiquer la création d'un pointeur sur le tableau dans des cellules mémoires continues. On peut associé des clefs à chacune des valeurs comme ceci :
my $ref_hash = {'clé1' => 'valeur1', 'clé2' => 'valeur2', 'clé3' => 'valeur3'}; |
Les tableaux associatifs à deux dimensions
Les tableaux associatifs à deux dimensions peuvent souvent causer des résultats assez étranges à cause, malheureusement, d'une mauvaise syntaxe autorisé par Perl. Même s'il est a parfois préférable d'éviter les tableaux à deux dimensions, ce genre d'opération est tout a fait possible. On peut ainsi définir directement deux niveaux de données comme ceci:
my $montableau = { 'niveaui' => { 'niveaua' => "valeura", 'niveaub' => "valeurb" }, 'niveauii' => { 'niveaua' => "valeurc", 'niveaub' => "valeurd" } }; |
Ensuite, on peut consulter la valeur d'un deuxième niveau comme ceci :
print $montableau->{'niveauii'}->{'niveaua'}; |
Il retournera donc «valeurc».
Exemple
Voici un exemple permettant d'aller sortir la liste d'un tableau envoyé comme paramètre dans le champs «List» dans un tableau associatif :
#!/usr/bin/perl
use strict;
sub maprocedure() {
my (@List) = ({'id' => 'c0','nom' => 'Mon premier'},{'id' => 'c1','nom' => 'Mon deuxieme'});
my ($champs1,$champs2);
return {'Champs1' => $champs1, 'Champs2' => $champs2, 'List' => \@List};
}
my $aryhash = maprocedure();
foreach(@{$aryhash->{'List'}}) {
print '{"'.$_->{'id'}.'","'.$_->{'nom'}.'"}';
}
Voici son résultat :
{"c0","Mon premier"}{"c1","Mon deuxieme"}