Les tableaux en Perl



  1. Qu'est-ce qu'un tableau ?

Un tableau est une structure de variables, c'est à dire qu'une seule variable contient plusieurs valeurs. Ce type de structure est particulierement utile si l'on souhaite utiliser un ordre, ou un rang. Le tableau contient donc un certain nombre d'informations dissociées les unes des autres. Pour accéder à la première valeur du tableau, il suffit d'utiliser "$Nom_Tableau[0]", pour accéder à la n-ième valeur, il faut utiliser "$Nom_Tableau[n]" ! L'intérêt également en Perl, contrairement à d'autre langage, c'est qu'il stocke les chaines de caractères et les valeurs numérique de la même façon. Ainsi, vous pouvez mettre dans un tableau aussi bien du texte, comme un prénom, que des nombres, comme un âge.

  2. Exemple d'utilisation



  2. 1. Général

Par exemple, on peut vouloir définir l'ordre des enfants dans une famille. Une famille avec 5 enfants nés dans l'ordre "Pierre, Paul, Jean, Jacques et Kringer" peut être enregistrée en utilisant 5 variables, mais ce n'est pas top pratique (trop lourd a gérer...). Vous pouvez donc l'enregistrer dans une seule et même variable, par exemple "@famille", qui contiendra toutes les informations.
Voici donc un exemple de tableau :
#!/usr/bin/perl

@famille = ("Pierre","Paul","Jean","Jacques","Kringer");

for $i (0..4) {
  print $famille[$i]."\n";
}

Voici un exemple d'utilisation des tableaux qui va écrire :
Pierre
Paul
Jean
Jacques
Kringer

Le même résultat peut-être obtenu en entrant les variables ainsi :
#!/usr/bin/perl

$famille[0]="Pierre";
$famille[1]="Paul";
$famille[2]="Jean";
$famille[3]="Jacques";
$famille[4]="Kringer";

for $i (0..4) {
  print $famille[$i]."\n";
}



  2. 2. ajouter un élément à un tableau

Si vous avez un nouvel enfant, vous devez l'ajouter à la liste, sinon, c'est pas sympa pour lui. Supposons que votre nouveau bébé soit une fille, appelé Cunégonde.Voici comment faire :
#!/usr/bin/perl

$famille[0]="Pierre";
$famille[1]="Paul";
$famille[2]="Jean";
$famille[3]="Jacques";
$famille[4]="Kringer";

for $i (0..$#famille) {
  print $famille[$i]."\n";
}
$famille[$#famille]="Cunégonde";

for $i (0..$#famille) {
  print $famille[$i]."\n";
}
Ceci permet d'ajouter un élément à la fin d'un tableau. Vous ne pouvez pas directement ajouter un élément au milieu d'un tableau. Si vous voulez malgré tout le faire, vous devez d'abord déplacer tous les éléments suivants l'enregistrement que vous voulez ajouter, puis remplacer l'élément existant.

Dans notre cas, si vous aviez voulu ajouter Cunegonde entre Jean et Jacques, voici ce que vous auriez dû faire :
#!/usr/bin/perl

$famille[0]="Pierre";
$famille[1]="Paul";
$famille[2]="Jean";
$famille[3]="Jacques";
$famille[4]="Kringer";

for $i (3..$#famille) {
  $famille[$i+1] = $famille[$i];
}
$famille[3]="Cunégonde";

for $i (0..$#famille) {
  print $famille[$i]."\n";
}
Et voila !


  2. 3. supprimer un élément d'un tableau

Il suffit pour cela de changer la valeur de $#[Nom_Tableau]. Cette méthode fait plus bidouille qu'autre chose, c'est vrai, mais vous n'avez pas le choix. Ce qui veut dire que si vous souhaitez enlever un élément au milieu d'un tableau. Il est par contre à noter que les tableaux ne sont pas fait pour ce genre de traitement, mais ils peuvent être utilisés malgré tout, mais du coup, le traitement en est plus compliqué.

Par exemple, si je veux supprimer Kringer parce qu'en fait, il est pas sympa, voila comment faire :
#!/usr/bin/perl

$famille[0]="Pierre";
$famille[1]="Paul";
$famille[2]="Jean";
$famille[3]="Jacques";
$famille[4]="Kringer";

$#famille = $#famille - 1

for $i (0..$#famille) {
  print $famille[$i]."\n";
}


  3. Tableau multi-dimensionnel

Cela ne veut pas dire que le tableau peut voyager d'une dimension dans l'autre, mais simplement, si on utilise une représentation graphique, qu'il n'y a plus une seule colonne, mais plusieurs. L'intérêt est de pouvoir ainsi regrouper des informations liées entre elles. On se retrouve donc à pouvoir faire l'équivalent d'une base de données.

Par exemple, en reprenant l'exemple précédent, on peut facilement ajouter l'âge de la personne en face de son prénom !

Voici comme l'exemple précédent peut être transformé :

#!/usr/bin/perl

@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]);

for $i (0..4) {
print $famille[$i][0]." (".$famille[$i][1].")\n";
}


  4. Opération sur les tableaux



  4. 1. Taille d'un tableau

Il peut être pratique de compter le nombre d'élément d'un tableau, voici comment faire :
#!/usr/bin/perl

@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]);

$taille1 = scalar @famille;
print "taille1 : $taille1\n";
$taille2 = $#famille;
print "taille2 : $taille2\n";

Voici le résultat :
taille1 : 5
taille2 : 4
Comme vous pouvez le constater, il y a une difference de "1". En fait, $#[Nom_Tableau] donne l'indice du dernier élément du tableau, alors que scalar compte le nombre d'éléments. On obtient donc le résultat suivant :
scalar @famille == $#famille + 1
Ceci est toujours vrai, même avec d'autres variables que @famille !

Voici un exemple :


  4. 2. Trier un tableau



  4.2.1. Tableau à une dimension

Il suffit d'utiliser la fonction "sort"... Elle est faite pour ça !

Par exemple, pour trier dans l'ordre normal (c'est à dire alphanumérique), il suffit de faire ainsi :
#!/usr/bin/perl

@famille = ("Pierre","Paul","Jean","Jacques","Kringer");

for $i (0..4) {
  print $famille[$i]."\n";
}
@famille = sort (@famille);
print "\naprès le tri :\n";

for $i (0..4) {
  print $famille[$i]."\n";
}

Ce qui donne comme résultat:
Pierre
Paul
Jean
Jacques
Kringer

après le tri :
Jacques
Jean
Kringer
Paul
Pierre



  4.2.2. Tableau à plusieurs dimensions

#!/usr/bin/perl

@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]);

@famille = sort byage @famille;
sub byage {
  $a1 = $$a[0];
  $b1 = $$b[0];
  print "$a1\n";
  $a1 cmp $b1;
}

for $i (0..4) {
print $famille[$i][0]." (".$famille[$i][1].")\n";
}
Ce code permet de trier des chaines de caractères. Pour faire la même chose pour des nombres, il faut faire ainsi :
#!/usr/bin/perl

@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]);

@famille = sort byage @famille;
sub byage {
  $a1 = $$a[1];
  $b1 = $$b[1];
  print "$a1\n";
  $a1 <=> $b1;
}

for $i (0..4) {
print $famille[$i][0]." (".$famille[$i][1].")\n";
}



Page modifiée le : 18/03/2003
Site modifié le : 14/09/2020


Valid XHTML 1.0 Transitional