SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
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.
#!/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"; |
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 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.
Les scalaires, les listes et les 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.
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.
#!/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"; |
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.
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
.
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.
#!/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"; |
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 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.
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.
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 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 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 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 pop efface à la fin, donc respectivement le dernier élément d'une liste. La fonction 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 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 sort. Une fonction intéressante qui complète cette possibilité est aussi 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
.
Hashes (Variables) | |
Scalaires (Variables) | |
SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
© 2001 Stefan Münz / © 2003 Traduction Serge François, 13405@free.fr
selfhtml@fr.selfhtml.org