 |
| | | | | | | | | 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.
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.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";
}
|