SELFHTML

Listes ou Arrays (Variables)

Page d'information: vue d'ensemble

vers le bas Déclarer des listes ou arrays et affecter des valeurs
vers le bas Accéder à des éléments distincts de la liste
vers le bas Tableaux à plusieurs dimensions
vers le bas Fonctions et opérations pour manipuler les listes ou arrays

 vers le bas 

Déclarer des listes ou arrays et affecter des valeurs

Les listes sont des valeurs distinctes reliées ensemble. Quand vous voulez sauvegarder quelque chose qui forme un tout comme "tous les noms des éléments HTML" ou bien toutes les lignes d'un fichier", Vous pouvez le faire à l'aide de listes. Le type de variable en Perl dans lequel des listes peuvent être sauvegardées s'appelle Array.

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my @donnees = ("Jeanne",23,"Marseille","Bachot");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Sortie du test</title>\n";
print "</head><body>\n";

print "<pre>@donnees</pre>";

print "</body></html>\n";

Explication:

Dans l'exemple un tableau (array) nommé @donnees est déclaré. La "déclaration" signifie pour les tableaux la même chose que pour les Autre page d'information scalaires. Un tableau est introduit en Perl par le signe "chez" @. Derrière suit le nom du tableau. Lors de la déclaration d'un tableau vous pouvez affecter des valeurs de départ ou non. Dans l'exemple ci-dessus, des valeurs de départ ont été affectées. Les différentes valeurs sont incluses entre parenthèses comme il est montré et séparées les unes des autres par des virgules. Si vous ne voulez pas affecter de valeurs de départ, notez simplement quelque chose comme my @donnees; comme instruction. À la différence de la déclaration de scalaire sans affectation de valeur, la liste n'est pas "indéfinie" mais simplement vide.

Un Array en Perl ne peut contenir que des scalaires pour les différentes valeurs. Dans l'exemple ci-dessus, les différentes valeurs telles que Jeanne, Marseille et Bachot sont des chaînes de caractères tandis que 23 est un nombre.

Le script d'exemple envoie du code HTML au navigateur appelant, en sortant simplement la liste.

Attention:

Les scalaires, les listes et les Autre page d'information Hashes ont différents espaces de nommage. Les variables comme $name, @name et %name peuvent donc cohabiter sans problème dans le même script.

À la place de données constantes, vous pouvez également insérer d'autres variables dans une liste. Ensuite la valeur avec la variable correspondante est prise dans la liste. Par exemple:
my $age = 23;
my @donnees = ("Jeanne",$age,"Marseille","Bachot");

Quand vous voulez créer une liste avec des nombres ou des lettres dans un ordre croissant ou décroissant, il existe à cette fin une syntaxe spéciale:
my @Liste = (1..10); crée une liste avec 10 éléments, à savoir les nombres de 1 à 10.
my @Liste = ("A".."Z"); crée une liste avec 26 éléments, à savoir les lettres de A à Z.

Quand vous voulez créer une liste avec des éléments qui ne contient aucun espace, il existe à cette fin également une syntaxe spéciale:
my @donnees = qw(Jeanne 23 Marseille Bachot); crée un Array avec les éléments "Jeanne", 23, "Marseille" et "Bachotr". Avec cette syntaxe spéciale, vous ne pouvez cependant pas insérer de variable dans la liste.

 vers le hautvers le bas 

Accéder à des éléments distincts de la liste

Le type de variable pour une valeur distincte en Perl est une scalaire. Si vous voulez accéder dans cette liste aux différentes valeurs qui y sont sauvegardées, Utilisez donc un "contexte scalaire". Ce qui s'exprime aussi dans la syntaxe de Perl.

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my @donnees = ("Jeanne",23,"Marseille","Bachot");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Sortie du test</title>\n";
print "</head><body>\n";

print "$donnees[0] a $donnees[1] ans, habite à $donnees[2] et a son $donnees[3]\n";

print "</body></html>\n";

Explication:

Dans le script est encore déclaré le tableau @donnees et initialisé avec quatre valeurs. Le script envoie à nouveau du code HTML au navigateur appelant et sort les données. Cette fois-ci pourtant, il est accédé aux différentes valeurs de la liste sauvegardée dans le tableau @donnees. Avec $donnees[0] Il est accédé au premier élément de la liste, donc à la valeur Jeanne. Avec $donnees[1] au deuxième élément, donc 23 etc... L'important est de commencer le comptage à 0. Le nombre qui mentionne le numéro d'ordre de l'élément, doit figurer entre crochets. Les crochets font partie dans ce contexte (à l'intérieur de chaînes de caractères) du nom de variable et doivent être accolés directement derrière le nom du tableau (aucun espace n'est permis).

La syntaxe $donnees[0] montre avec le signe dollar placé devant, que l'accès à l'élément de tableau réclame une scalaire, car les scalaires sont toujours reconnaissables au signe dollar qui les précède.

Attention:

Quand vous avez un tableau nommé @donnees, vous pouvez grâce à la notation $#donnees rechercher le numéro d'ordre le plus élevé, donc le dernier élément de la liste sans savoir combien la liste contient d'éléments. Supposons que la liste @donnees ait 15 éléments: alors $#donnees donnerait la valeur 14 . Avec une notation telle que $donnees[$#donnees] vous pouvez donc rechercher la valeur du dernier élément de la liste @donnees.

 vers le hautvers le bas 

Tableaux à plusieurs dimensions

Si vous connaissez d'autres langages de programmation, vous avez peut-être déjà rencontré des tableaux à plusieurs dimensions. Ce sont des tableaux qui sauvegardent des données sous forme de matrice. Le plus simple à imaginer est un tableau à deux dimensions. Vous pouvez vous imaginer les données qui y sont sauvegardées comme un tableau. Pour adresser un élément déterminé, on va dans une ligne déterminée du tableau pour rejoindre une colonne déterminée.

Perl ne connaît pas les tableaux à plusieurs dimensions dans cette acception du terme mais ne connaît que des listes qui elles-mêmes peuvent à leur tour contenir des (références à des ) listes. Ici sont permises les imbrications aussi profondes soient elles. Représentez vous chaque sous-liste d'une liste comme une dimension.

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my @Liste_1 = ("Mulhouse","Montélimar","Mallemort");
my @Liste_2 = ("Marseille","Montpellier",@Liste_1);
my @Liste_3 = ("Marseille","Montpellier",[@Liste_1]);

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Sortie du test</title>\n";
print "</head><body>\n";

print "<b>Liste_2:</b><pre>@Liste_2</pre>\n";
print "<b>Liste_2[4]:</b><pre>$Liste_2[4]</pre>\n";

print "<b>Liste_3</b><pre>@Liste_3</pre>";
print "<b>Liste_3[2][1]:</b><pre>$Liste_3[2][1]</pre>\n";

print "</body></html>\n";

Explication:

Dans l'exemple sont déclarées trois listes au total, initialisées avec des valeurs de départ. Les listes @Liste_2 et @Liste_3 sont particulièrement intéressantes ici. Toutes deux contiennent chacune comme dernier "élément" la liste @Liste_1 complète qu'elles ont reçue en affectation (il faut veiller ici à ne pas placer le nom du tableau entre guillemets). La syntaxe ne diffère ici que légèrement: Dans l'affectation pour @Liste_2 est simplement noté @Liste_1, tandis que pour l'affectation pour @Liste_3 s'ajoutent encore des crochets. Ce qui donne [@Liste_1]. Cette petite différence a des conséquences: Alors en effet que pour @Liste_2 les différentes valeurs de @Liste_1 sont simplement ajoutées, une nouvelle sous-liste est ouverte grâce aux crochets pour @Liste_3.

Le script en exemple envoie du code HTML au navigateur appelant, ce qui met en lumière la différence. @Liste_2 comprend maintenant simplement cinq éléments, à savoir Marseille Montpellier Mulhouse Montélimar Mallemort. Une notation comme $Liste_2[4] accède au cinquième élément, donc à la valeur Mallemort. Liste_3 comprend par contre à présent trois éléments pour lesquels le dernier élément constitue une nouvelle liste avec ses propres éléments. Avec une instruction telle que print "@Liste_3"; Perl sortira comme troisième élément quelque chose comme par exemple ARRAY(0xb658ac). C'est tout simplement une référence Autre page d'information référence à la sous-liste. Pour accéder aux éléments de la deuxième dimension, vous devez utiliser des crochets doubles, un crochet par dimension. Une notation telle que $Liste_2[2][1] accède par [2] au troisième élément de @Liste_2 et ensuite encore par [1] au deuxième sous-élément de ce troisième élément qui est une liste. Dans l'exemple il est donc accédé à la valeur Montélimar.

L'exemple montre également que vous pouvez mélanger à souhait dans une liste différentes valeurs avec d'autres listes. Vous accédez au deuxième élément de Liste_3 avec Liste_3[1]. La mention d'une autre paire de crochets n'est pas nécessaire ici, étant donné que l'élément n'est pas une sous-liste.

Attention:

Vous pouvez établir à tout moment si un tableau est à une dimension ou s'il est pluridimensionnel, donc s'il contient des sous-listes. Si par exemple, vous avez déclaré avec l'instruction my @tableau; un tableau tout d'abord indéfini, vous pouvez noter ensuite sans problème une instruction comme $tableau[1][4] = 27;. Ainsi le tableau @tableau reçoit automatiquement deux éléments (avec les numéros 0 et 1). L'élément 0 reçoit la valeur indéfinie (undef), et l'élément 1 se voit affecter la référence à une liste de cinq éléments (0 à 4), dont les quatre premiers éléments reçoivent la valeur undef et le cinquième élément la valeur 27 que vous lui affectez.

 vers le hautvers le bas 

Fonctions et opérations pour manipuler les listes ou arrays

Il existe une quantité de fonctions Perl à l'aide desquelles vous pouvez influencer les listes. Quelques possibilités importantes doivent être nommées ici avec des liens à la description de la fonction concernée.

Scinder des chaînes de caractères dans des listes:
Quand vous avez des chaînes de caractères qui contiennent certains signes revenant régulièrement, vous pouvez traiter ces signes comme signes de séparation et transmettre la chaîne de caractères dans une liste (par exemple des valeurs séparées par des virgules). Pour ce faire existe en Perl la fonction Autre page d'information split.

Relier des listes à une chaîne de caractères:
Quelquefois, vous voudrez faire le contraire. On dispose de données dans une liste mais on voudrait pourtant les reconstituer en chaîne de caractères. Pour ce faire existe en Perl la fonction Autre page d'information join.

Modifier des éléments de la liste:
Par une instruction telle que $Liste[12] = "Olivier"; vous affectez au treizième élément de la liste une valeur. Au cas où une valeur était déjà sauvegardée dans cet élément, elle est remplacée par la nouvelle valeur.

Ajouter des éléments à la liste:
Pour ajouter des éléments à des listes, Perl dispose de la fonction Autre page d'information push.

Effacer des éléments à la liste:
Vous pouvez noter à tout moment quelque chose comme $Liste[12] = "";. Ce faisant, la valeur est effacée (ou plutôt écrasée pat une chaîne de caractères vide), Mais l'élément subsiste. Vous ne pouvez vraiment effacer dans une liste qu'au début et à la fin. Pour effacer vraiment des éléments d'un tableau , Perl dispose de trois fonctions. La fonction Autre page d'information pop efface à la fin, donc respectivement le dernier élément d'une liste. La fonction Autre page d'information shift efface au début, donc respectivement le premier élément d'une liste, et tous ceux qui suivent sont décalés d'un numéro d'index vers l'avant. Ce qui donc était auparavant $Liste[7], devient après $Liste[6]. La fonction Autre page d'information splice permet d'effacer des éléments à souhait dans un tableau, que ce soit au début ou à la fin ou même au milieu. Comme avec shift les numéros d'index qui suivent sont décalés en conséquence. Avec splice vous pouvez même remplacer toute une liste partielle d'un tableau par une autre liste ou insérer une nouvelle liste dans un tableau.

Trier les éléments d'une liste et inverser l'ordre du tri:
Vous pouvez réorganiser complètement une liste en triant ses éléments par ordre alphabétique ou numérique. Perl dispose pour le faire de la fonction Autre page d'information sort. Une fonction intéressante qui complète cette possibilité est aussi Autre page d'information reverse, qui inverse simplement les éléments de la liste. Le premier élément devient le dernier, le deuxième l'avant dernier etc... En triant et en appliquant ensuite le fonction reverse on peut donc par exemple avoir un ordre alphabétique décroissant.

Rechercher le nombre d'éléments d'une liste:
La longueur de la liste peut être recherché très simplement en Perl car la liste est interprétée dans le contexte scalaire. Cela sonne compliqué, c'est néanmoins très simple. Un exemple:
my $longueur = @Liste;
Ici est sauvegardé dans la scalaire $longueur le nombre d'éléments du tableau @Liste.

 vers le haut
page suivante Autre page d'information Hashes (Variables)
page précédente Autre page d'information Scalaires (Variables)
 

© 2001 Stefan Münz / © 2003 Traduction Adresse électronique Serge François, 13405@free.fr
Adresse électronique selfhtml@fr.selfhtml.org