SELFHTML

Fonctions pour les listes et les hashes

Page d'information: vue d'ensemble

vers le bas Généralités sur ces fonctions
vers le bas delete - effacer une paire d'éléments du hash
vers le bas each - rechercher la paire d'éléments suivante dans le hash
vers le bas exists - rechercher si un nom existe dans un hash
vers le bas grep - extraire une partie de la liste au moyen d'une condition
vers le bas join - changer une liste en chaîne de caractères
vers le bas keys - rechercher tous les noms d'un hash
vers le bas map - appliquer des commandes sur tous les éléments de la liste
vers le bas pop - effacer le dernier élément d'une liste
vers le bas push - ajouter des éléments à une liste
vers le bas reverse - inverser l'ordre des éléments de la liste
vers le bas shift - effacer le premier élément d'une liste
vers le bas sort - trier les éléments d'une liste
vers le bas splice - effacer, ajouter ou remplacer des éléments dans une liste
vers le bas undef - retirer une valeur d'un hash ou d'une liste
vers le bas unshift - ajouter des éléments au début d'une liste
vers le bas values - rechercher toutes les valeurs d'un hash

 vers le bas 

Généralités sur ces fonctions

Pour comprendre les fonctions réunies ici, vous devez connaître la signification des listes, arrays et hashes en Perl comment ils sont définis et quelles particularités il présentent. Ceci est traité dans les parties sur les Autre page d'information listes et les Autre page d'information hashes.

 vers le hautvers le bas 

delete - effacer une paire d'éléments du hash

Efface une paire d'éléments quelconque d'un hash. Contrairement à la fonction vers le bas undef, qui n'efface que la valeur, en laissant cependant figurer la paire d'éléments, delete retire la paire complète d'éléments.

Attend comme paramètre:
1. la clé de l'élément à effacer.

Renvoie la valeur de la paire d'éléments effacée ou bien undefined, au cas où rien n'a été effacé.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my %couleurs_body = ("text","#000000","link","#FF0000","alink","0000FF","vlink","#990000","bgcolor","#FFFFFF");
delete $couleurs_body{'bgcolor'};

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></head><body>\n";
print "text = $couleurs_body{'text'}<br>\n";
print "link = $couleurs_body{'link'}<br>\n";
print "alink = $couleurs_body{'alink'}<br>\n";
print "vlink = $couleurs_body{'vlink'}<br>\n";
print "bgcolor = $couleurs_body{'bgcolor'}\n";
print "</body></html>\n";

Explication:

L'exemple définit un hash nommé %couleurs_body. Y sont définies les paires d'éléments pour les attributs habituels de l'élément body de HTML. À l'aide de la fonction delete la paire d'éléments complète pour bgcolor est ensuite effacée. Pour le contrôle, du code HTML est envoyé au navigateur et sort toutes les paires d'éléments. La tentative de sortir l'élément bgcolor qui n'existe plus provoque ici une erreur.

Attention:

Vous pouvez également appliquer delete sur des hashes prédéfinis tels que %ENV. Ce qui a pour conséquence de modifier les variables d'environnement!

L'exemple ci dessus est peu satisfaisant dans la mesure où la sortie de bgcolor = continue à exister vide. Comment cela peut être évité, c'est ce que montre l'extension de l'exemple en relation avec la fonction vers le bas exists.

 vers le hautvers le bas 

each - rechercher la paire d'éléments suivante dans le hash

Recherche la paire d'éléments suivante dans le hash et se prête bien avant tout pour traiter toutes les paires d'éléments dans une boucle.

Attend comme paramètre:
1. le hash.

Renvoie au choix soit une liste de deux éléments avec le nom et la valeur de la paire d'éléments suivante, ou bien une scalaire avec le nom de la prochaine paire d'éléments.



Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my %courriel = ("expediteur","tabaluga\@dragon.net",
          "Received","from smtp\@mailout.fr",
          "Date", "Sat, 01 Apr 2000 01:45:35 +0200",
          "X-Mailer","Mozilla 4.72 [en] (WinNT; U)",
          "To","selfhtml\@selfhtml.com.fr",
          "Content-Type","text/plain; charset=us-ascii");
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></head><body><pre>\n";
while (my ($nom, $valeur) = each %courriel) {
  print "$nom: $valeur\n";
}
print "</pre></body></html>\n";

Explication:

L'exemple définit un hash avec des paires d'éléments qui représentent les données d'entête typiques d'un courriel. Ensuite, l'exemple envoie du code HTML au navigateur dans lequel sont sorties toutes les paires d'éléments du hash ligne par ligne. Pour ce faire, les paires d'éléments sont traitées dans une Autre page d'information boucle while avec each. La valeur renvoyée par each est sauvegardée, dans l'exemple, dans une liste de deux éléments my ($nom, $valeur). S'il ne figurait à cet endroit qu'une scalaire, donc par exemple $element_suivant, seul le nom de l'élément suivant y serait sauvegardé, donc par exemple expediteur, et pas la valeur correspondante (tabaluga@dragon.net). L'exemple sort à chaque boucle pour contrôle, les données trouvées.

 vers le hautvers le bas 

exists - rechercher si un nom existe dans un hash

Recherche si un nom existe dans un hash, et est en principe utilisé en relation avec une Autre page d'information requête if.

Attend comme paramètre:
1. le nom d'élément.

Renvoie true, si le nom d'élément existe dans le hash.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my %couleurs_body = ("text","#000000","link","#FF0000","alink","0000FF","vlink","#990000","bgcolor","#FFFFFF");
delete $couleurs_body{'bgcolor'};

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></head><body>\n";

print "text = $couleurs_body{'text'}<br>\n" if exists $couleurs_body{'text'};
print "link = $couleurs_body{'link'}<br>\n" if exists $couleurs_body{'link'};
print "alink = $couleurs_body{'alink'}<br>\n" if exists $couleurs_body{'alink'};
print "vlink = $couleurs_body{'vlink'}<br>\n" if exists $couleurs_body{'vlink'};
print "bgcolor = $couleurs_body{'bgcolor'}\n" if exists $couleurs_body{'bgcolor'};
print "</body></html>\n";

Explication:

L'exemple définit un hash nommé %couleurs_body. Y sont définies les paires d'éléments pour les attributs habituels de l'élément body de HTML. À l'aide de la fonction vers le haut delete la paire d'éléments complète pour bgcolor est ensuite effacée. Pour le contrôle, du code HTML est envoyé au navigateur et sort toutes les paires d'éléments. Les paires d'éléments ne sont toutefois sorties que si elles existent. Pour cela, la fonction exists est appliquée sur la paire d'éléments à sortir dans une requête if placée après. Les données sont sorties uniquement si le nom de la paire d'éléments est trouvé. Dans l'exemple, on évite par ce moyen que la ligne bgcolor = soit sortie avec une valeur vide.

 vers le hautvers le bas 

grep - extraire une partie de la liste au moyen d'une condition

Extrait certains éléments d'une liste, à savoir ceux qui satisfont à une condition déterminée, donc par exemple tous les chiffres impairs d'une liste de chiffres ou tous les fichiers à partir d'une certaine taille d'une liste de fichiers. Les éléments extraits sont sauvegardés dans une nouvelle liste distincte.

Attend comme paramètre:
1. la condition à laquelle doivent satisfaire les éléments à extraire de la liste. Il peut s'agir par exemple d'une expression régulière mais aussi d'une comparaison,
2. la liste à partir de laquelle les éléments doivent être extraits.

Renvoie une liste avec les éléments extraits qui remplissent la condition.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

opendir(DIR, "/usr/texte/articles");
my @Eintraege = readdir(DIR);
closedir(DIR);

chdir("/usr/texte/articles");

my @fichiers_HTML = grep(/\.htm/,@elements);
my @grands_fichiers = grep(-s > 50 * 1024, @elements);

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test</title></head><body>\n";
print "<h2>Fichiers HTML du r�pertoire</h2>\n";
foreach(@fichiers_HTML) {
  print "$_<br>\n";
}
print "<h2>Fichiers de plus de  50 kilo-octets dans le r�pertoire</h2>\n";
foreach(@grands_fichiers) {
  print "$_<br>\n";
}
print "</body></html>\n";

Explication:

Dans l'exemple un répertoire est lu. Les fichiers sont sauvegardés dans la liste @elements (pour la lecture de fichiers voir Autre page d'information readdir). Ensuite et avec Autre page d'information chdir il est passé dans le répertoire lu précédemment, parce que le deuxième des appels grep qui suivent exige que le répertoire lu soit le répertoire actuel.

Le premier des deux appels de grep recherche dans la liste lue @elements tous les éléments dans lesquels on trouve .htm. De cette façon, grep recherche tous les fichiers HTML de la liste. Les fichiers trouvés sont sauvegardés dans la liste renvoyée @fichiers_HTML.

Tandis que lors du premier appel de grep une Autre page d'information expression régulière est employée, pour formuler la condition d'extraction, il s'agit lors du deuxième appel d'une comparaison, similaire à ce que l'on connaît par exemple des Autre page d'information Instructions conditionnelles avec if, else et elsif. Dans l'exemple tous les éléments sont extraits pour lesquels la taille de fichier excède 50 Kilo-octets (50*1024 octets) . on se sert ici de l'un des Autre page d'information opérateurs de test fichier pour fichiers et répertoires -s. Les fichiers trouvés sont sauvegardés dans la liste renvoyée @grands_fichiers.

L'exemple ci-dessus envoie ensuite du code HTML au navigateur et sort les deux listes trouvées pour les fichiers HTML et les fichiers dont la taille excède 50 kilo-octets.

 vers le hautvers le bas 

join - changer une liste en chaîne de caractères

Relie les éléments d'une liste en une chaîne de caractères. Dans la chaîne de caractères, les anciens éléments de la leste sont séparés les uns des autres par un signe déterminé ou une suite de signes déterminée.

Attend comme paramètre:
1. le signe ou la suite de signes qui doit servir à séparer les éléments de la liste,
2. la liste.

Renvoie une liste de caractères dans laquelle sont notés tous les éléments de la liste transmises séparés par le signe ou la suite de signes mentionnés pour la séparation.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @valeurs;
for(my $i=0; $i<16; $i++) {
    $valeurs[$i] = 2 ** ($i+1);
}
my $chaine_valeurs = join(";",@valeurs);

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></head><body>\n";
print "$chaine_valeurs\n";
print "</body></html>\n";

Explication:

L'exemple génère une liste nommée @valeurs dans une Autre page d'information boucle for. Y sont sauvegardés les résultats des opérations de 21 à 216 (à cet effet sert l'Autre page d'information opérateur de calcul **). Cette liste est ensuite transmise à la fonction join. Un point virgule (;) est déterminé comme signe de séparation. Le résultat est sauvegardé dans la scalaire $chaine_valeurs, une simple chaîne de caractères. Pour le contrôle, du code HTML est envoyé au navigateur qui sort le résultat.

Attention:

La fonction inverse pour créer une liste à partir d'une chaîne de caractères avec des signes de séparation et des valeurs est Autre page d'information split.

 vers le hautvers le bas 

keys - rechercher tous les noms d'un hash

Sauvegarde tous les noms de paire d'éléments d'un hash dans une liste.

Attend comme paramètre:
1. le hash.

Renvoie une liste des paires d'éléments.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @variables_environnement = keys(%ENV);

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></head><body>\n";
print "<p>Les variables d'environnement suivantes sont d�finies:</p>\n";
print "<ul>\n";
foreach(@variables_environnement) {
  print "<li>$_</li>\n";
}
print "</ul>\n";
print "</body></html>\n";

Explication:

L'exemple recherche tous les noms du hash Autre page d'information prédéfini %ENV dans la liste @variables_environnement. Pour le contrôle, du code HTML est envoyé au navigateur dans lequel sont listées toutes les variables d'environnement.

Attention:

Dans l'exemple ne sont listés que les noms des variables d'environnement disponibles et pas leur valeur actuelle! La fonction pour ne rechercher que les valeurs d'un hash et pas leur nom est vers le bas values.

 vers le hautvers le bas 

map - appliquer des commandes sur tous les éléments de la liste

Applique des commandes sur tous les éléments d'une liste. Pratiquement pour éviter une boucle Autre page d'information for- ou Autre page d'information foreach.

Attend comme paramètre:
1. une commande qui doit être appliquée à tous les éléments de la liste. Il peut s'agir d'une fonction mais aussi de toute une série d'instructions qui sont rassemblées dans un bloc, 2. la liste sur laquelle la commande doit être appliquée.

Renvoie la liste après traitement.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @fichiers = ("Index.htm","ACDC.html","acdc.jpg","oasis.htm","Oasis.jpg");
@fichiers = map(lc, @fichiers);

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></head><body>\n";
foreach(@fichiers) {
  print "$_<br>\n";
}
print "</body></html>\n";

Explication:

Dans l'exemple est définie une liste avec des noms le fichiers. Les noms de fichiers contiennent en partie aussi des majuscules. Ensuite la fonction map est appliquée sur la liste. Ici la fonction Autre page d'information lc est appliquée à tous les éléments de la liste et impose une écriture en minuscules de tous les signes. Pour le contrôle, l'exemple envoie du code HTML au navigateur et sort ainsi les éléments de la liste après traitement.

 vers le hautvers le bas 

pop - effacer le dernier élément d'une liste

Retire d'une liste le dernier élément. La liste est raccourcie d'un élément.

Attend comme paramètre:
1. la liste.

Renvoie l'élément effacé.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my $phrase = "Ne repousse pas � demain ce que tu peux faire le jour m�me";
my $longueur_phrase = length($phrase);
my @signes;
for(my $i=0;$i<$longueur_phrase;$i++) {
  $signes[$i] = substr($phrase,$i,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></head><body>\n";
for(my $i=0; $i<$longueur_phrase; $i++) {
  print "@signes<br>\n";
  pop(@signes);
}
print "</body></html>\n";

Explication:

L'exemple définit une phrase et en extrait les différents signes dans une liste (explications à ce sujet, voir la fonction Autre page d'information substr). L'exemple envoie du code HTML au navigateur. Ici dans une Autre page d'information boucle for, qui défilera aussi souvent qu'il y a de signes dans la phrase d'origine, la liste complète @signes est sortie à chaque fois. La liste est toutefois raccourcie du dernier élément à chaque boucle avec la fonction pop. Ainsi à chaque boucle un signe de moins est-il sorti.

 vers le hautvers le bas 

push - ajouter des éléments à une liste

Ajoute un ou plusieurs nouveaux éléments à la fin d'une liste.

Attend comme paramètre:
1. la liste à laquelle l'élément doit être ajouté,
2. à n. un ou plusieurs éléments à ajouter.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @villes = ("Wien","Madrid","Rome","Stockholm","Riga");
my @nouvelles_villes = ("Paris","Lisbonne","Sofia");
foreach(@nouvelles_villes) {
  push(@villes,$_);
}
@villes = sort(@villes);

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></head><body>\n";
foreach(@villes) {
  print "$_<br>\n";
}
print "</body></html>\n";

Explication:

Dans l'exemple deux listes sont définies: @villes et @nouvelles_villes. Dans une Autre page d'information boucle foreach les éléments de la liste @nouvelles_villes sont ajoutés l'un après l'autre à la liste @villes. À l'aide de la fonction vers le bas sort la nouvelle liste avec toutes les villes est triée en suite dans l'ordre "asciibétique" (d'après l'ordre des signes dans le jeu de caractères ASCII). L'exemple envoie du code HTML au navigateur dans lequel la nouvelle liste complète sera sortie pour le contrôle.

 vers le hautvers le bas 

reverse - inverser l'ordre des éléments de la liste

Inverse une liste de telle sorte que le premier élément est ensuite le dernier, le deuxième l'avant dernier etc...

Attend comme paramètre:
1. la liste souhaitée.

Renvoie la liste après traitement.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @nombres = (1..100);
@nombres = reverse(@nombres);

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></head><body>\n";
foreach(@nombres) {
  print "$_<br>\n";
}
print "</body></html>\n";

Explication:

L'exemple définit une liste avec les nombres de 1 à 100. Ensuite la fonction reverse est appliquée à la liste, de telle façon qu'y soient sauvegardés les nombres de 100 à 1. Pour le contrôle du code HTML est envoyé au navigateur et sort la liste après traitement.

Attention:

La fonction peut aussi être appliquée à des Autre page d'information hashes. Exemple:
%Mailheader = reverse(%Mailheader);
Ici la clé et la valeur des éléments sont échangées l'une avec l'autre. Ce qui pose pourtant problème quand un hash a plusieurs valeurs identiques. Dans ce cas, seule une des valeurs du hash traité (qui sert maintenant de clé) est prise en compte.

 vers le hautvers le bas 

shift - effacer le premier élément d'une liste

Retire le premier élément d'une liste. le deuxième élément est ensuite le premier etc... La liste est raccourcie d'un élément.

Attend comme paramètre:
1. la liste devant être traitée.

Renvoie l'élément effacé.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @etats_d_esprit = ("peur, ","m�lancolie, ","tristesse, ","rage, ","dissension, ","haine");

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></head><body>\n";
my $max = @etats_d_esprit;
for(my $i = 0; $i < $max; $i++) {
  print "<p>maintenant  pr�domine encore la @etats_d_esprit<br>\n";
  shift(@etats_d_esprit);
}
print "<p>et maintenant r�gne la paix!</p>\n";
print "</body></html>\n";

Explication:

L'exemple définit une liste avec des mauvais états d'esprit. Dans le code HTML qui est envoyé au navigateur est notée une Autre page d'information boucle for. Elle sera parcourue aussi souvent que la liste d'origine compte d'éléments. Pour cela la longueur de la liste est sauvegardée dans la scalaire $max. À chaque passage de la boucle est sorti lesquels des mauvais états d'esprit prédominent encore. À chaque passage de la boucle, le premier des états d'esprit de la liste est effacé avec shift. Ce qui fait que la liste devient toujours plus petite et les états d'esprits moins nombreux. À la fin il n'y en a plus. Ensuite la boucle est également terminée et une phrase triomphale est encore sortie.

Attention:

La fonction shift est aussi volontiers employée dans la pratique pour "traiter" des paramètres transmis dans des sous-programmes. Vous trouverez un exemple dans la partie expliquant comment Autre page d'information appeler des sous-programmes avec des paramètres.

 vers le hautvers le bas 

sort - trier les éléments d'une liste

Trie les éléments d'une liste . Il y a ici deux possibilités. Soit vous triez la liste d'après l'algorithme de tri par défaut. Celui-ci trie par ordre alphabétique ou plus exactement "asciibétiquement" (d'après l'ordre des signes dans le jeu de caractères ASCII). Ou bien vous imposez votre propre algorithme de tri. Pour cela, vous définissez par exemple un Autre page d'information sous-programme, qui accomplit l'algorithme correspondant. Ceci est important par exemple pour trier les éléments d'une liste numériquement.

Attend comme paramètre:
soit:
1. la liste à trier.
soit:
1. l'instruction ou le nom du sous programme avec l'algorithme de tri,
2. la liste à trier.

Renvoie la liste triée. Toutefois, il est important que la valeur renvoyée soit sauvegardée dans une autre liste que celle transmise en paramètre.

Exemple 1 d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @amies = ("Ninon","Martine","Dani�le","Christine","Isabelle","Sabine");
my @ordre = sort(@amies);

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></head><body>\n";
for(@ordre)
 {
  print "$_<br>\n";
 }
print "</body></html>\n";

Explication:

Cet exemple montre le tri simple standard. Il définit une liste de noms d'amies. Ensuite la liste est triée à l'aide de sort. La liste renvoyée est sauvegardée dans la nouvelle liste @ordre. Pour le contrôle, du code HTML est envoyé au navigateur et sort la liste triée.

Exemple 2 d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @liste_meilleurs_resultats = (9834,9837,5989,4509,4329,6509,2837,8289,10845);
my @liste_triee = sort(tri_numerique @liste_meilleurs_resultats);

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></head><body>\n";
for(@liste_triee) {
  print "$_<br>\n";
 }
print "</body></html>\n";

sub tri_numerique {
 if($a < $b)
  { return -1; }
 elsif($a == $b)
  { return 0; }
 else
  { return 1; }
}

Explication:

Le deuxième exemple définit une liste nommée @liste_meilleurs_resultats. Ensuite la liste est triée à l'aide de sort. Étant donné qu'il s'agit de valeurs numériques une fonction est utilisée qui met à disposition l'algorithme de tri numérique. Car triée "asciibétiquement", la dernière valeur 10845 apparaîtrait au début de la liste triée dans l'ordre croissant ce qui ne doit pas être le cas étant donné qu'elle est la valeur la plus élevée qui doit apparaître en dernier. C'est pourquoi le nom du sous-programme est d'abord transmis à l'appel de sort et ensuite séparée par un espace (et non pas par une virgule!), la liste à trier. La liste renvoyée est sauvegardée dans l'exemple dans la nouvelle liste @liste_triee. Pour le contrôle du code HTML est envoyé au navigateur et sort la liste après traitement.

Attention:

Le sous-programme tri_numerique noté dans l'exemple est écrit de façon générale et accomplit un simple tri numérique, tel qu'on l'attend de la fonction sort. Vous pouvez donc toujours utiliser ce sous-programme quand vous désirez trier des listes numériquement.

Pour obtenir un tri décroissant, vous pouvez par exemple , après l'application de sort, appliquer encore la fonction vers le haut reverse à la liste.

 vers le hautvers le bas 

splice - effacer, ajouter ou remplacer des éléments dans une liste

retire un ou plusieurs éléments dans une liste et peut en outre insérer au même endroit un ou plusieurs éléments. C'est pourquoi splice est une espèce de fonction universelle pour la manipulation de listes qui permet entre autre tout ce que permettent de faire les différentes fonctions pop, push, shift et unshift et partant de là encore beaucoup plus.

Attend comme paramètre:
1. la liste devant être traitée,
2. numéro d'index de l'élément à partir duquel il faut effacer (pour celui-là le comptage commence à 0 pour le premier élément de la liste),
3. (facultatif) nombre d'éléments à effacer. Si rien n'est mentionné, tous les éléments jusqu'à la fin de la liste sont effacés! Pour n'effacer aucun élément donc pour en insérer seulement, il faut transmettre 0 à cet endroit.
4. à n. (facultatif) un à n éléments, qui doivent être insérés (à la place des éléments effacés).

Renvoie une liste avec les éléments effacés.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @enregistrement = ("Henri","Quatre","1 rue de la poule au pot","59100 Roubaix");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test</title></head><body>\n";
print "<h2>Nouvelle adresse �lectronique et nouveau site Web:</h2>\n";
splice(@enregistrement,2,0,"hdl\@ravaillac.net","http://www.ravaillac.net/hdl/");
my $Feld;
foreach $champ (@enregistrement) {
  print "$champ<br>\n";
}
print "<h2>Nouvelle adresse:</h2>\n";
splice(@enregistrement,4,1);
splice(@enregistrement,-1,1,"Boite postale 1234, France");
foreach $champ (@enregistrement) {
  print "$champ<br>\n";
}
print "</body></html>\n";

Explication:

Dans l'exemple une liste nommée @enregistrement est définie et comprend plusieurs éléments. Du code HTML est envoyé au navigateur et sort la liste. La liste est ici cependant manipulée plusieurs fois avec splice. Dans un premier temps, les éléments pour l'adresse électronique et le site Web sont insérés dans l'enregistrement - à savoir derrière les deux premiers éléments, donc derrière le prénom et le nom. Pour ce faire le numéro d'index 2 est transmis comme deuxième paramètre pour le troisième élément. Aucun élément ne doit être effacé, les données doivent seulement être insérées. C'est pourquoi 0 est transmis comme troisième paramètre. Enfin, les deux nouveaux éléments pour l'adresse électronique et le site Web sont encore transmis. Pour le contrôle, la liste est ensuite d'abord sorti. Elle comprend à ce moment les éléments:
Henri,Quatre,hdl@ravaillac.net,http://www.ravaillac.net/hdl/,1 rue de la poule au pot,59100 Roubaix

La liste dans l'exemple continue néanmoins à être manipulée. D'abord l'élément avec le numéro d'index 4 est effacé (dans l'état actuel de @enregistrement la mention de rue. Le 1 transmis comme troisième paramètre fait en sorte que ce seul élément uniquement est effacé. @enregistrement comprend à ce moment les éléments:
Henri,Quatre,hdl@ravaillac.net,http://www.ravaillac.net/hdl/,59100 Roubaix

Tout de suite après dans l'exemple suit cependant un troisième appel de splice. Celui-ci remplace le dernier élément de la liste par un nouveau. Dans ce but est transmis comme deuxième paramètre -1. Étant donné que l'interpréteur Perl commence à compter à partir de la fin pour les nombres négatifs, -1 correspond donc au dernier numéro d'index, -2 à l'avant dernier etc.... Le troisième paramètre transmis est 1 de façon à ce que ce dernier élément soit effacé. Enfin un autre paramètre est encore transmis, à savoir l'élément de remplacement. Ainsi est créé l'effet que simplement une nouvelle valeur est affectée au dernier élément de la liste. En interne, il s'en passe pourtant davantage.

La liste a après le troisième appel de splice l'apparence suivante:
Elle comprend à ce moment les éléments:
Henri,Quatre,hdl@ravaillac.net,http://www.ravaillac.net/hdl/,Boite postale 1234, France.
Pour le contrôle, cet état est sorti encore une fois.

Le tableau suivant montre pour illustrer encore quelques exemples splice et leur correspondance par l'application d'autres fonctions pour les listes:

Instruction avec splice: correspond à l'instruction suivante: voir aussi:
splice(@Array,@Array,0,"Element") push(@Array,"Element") vers le haut push
splice(@Array,-1) pop(@Array) vers le haut pop
splice(@Array,0,1) shift(@Array) vers le haut shift
splice(@Array,0,0,"Element") unshift(@Array,"Element") vers le bas unshift

 

 vers le hautvers le bas 

undef - retirer une valeur d'un hash ou d'une liste

Retire une valeur d'un hash ou d'une liste. L'élément lui même est conservé. La valeur est en fin de compte fixée à la valeur undef.

Attend comme paramètre:
1.pour un hash le nom d'élément et pour une liste la mention du numéro d'ordre de l'élément. Peut en outre être également appliqué à de simples scalaires ou à des sous-programmes pour fixer leur valeur ou la valeur qu'ils renvoient sur undef.

Renvoie undef dans tous les cas.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @joueurs = ("Richard","Annie","Fr�d�ric","Myriam");
my %points = ("Richard","350","Annie","400","Fr�d�ric","150","Myriam","700");

undef($joueurs[2]);
undef($points{'Fr�d�ric'});

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></head><body>\n";
print "<p>Les joueurs suivants prennent part au jeu:</p>\n";
print "<ul>\n";
foreach(@joueurs) {
  print "<li>$_</li>\n";
}
print "</ul>\n";
print "<p>Les points suivants sont � jour:</p>\n";
print "<ul>\n";
my @noms = keys(%points);
foreach(@noms) {
  print "<li>$_: $points{$_} points</li>\n";
}
print "</ul>\n";
print "</body></html>\n";

Explication:

L'exemple définit une liste nommée @joueurs et un hash nommé %points. Le joueur Frédéric, qui s'est retiré du jeu, est retiré des deux structures de données avec undef. L'élément de la liste pour Frédéric et la paire d'éléments correspondants dans le hash sont toutefois conservés. Dans la liste, la valeur donc le nom est retiré par undef, et dans le hash, le nom Frédéric est conservé, seule sa valeur attribuée 100 est retirée. "Retiré" signifie dans les deux cas que la valeur est fixée sur undef undef. Pour le contrôle, du code HTML est envoyé au navigateur dans l'exemple et sort toutes les données. Les éléments retirés sont sortis parce qu'ils existent encore, sans valeur visible toutefois. Au lieu de cela, il y a lors de l'accès à ces éléments un message d'erreur. La valeur undef signifie que la scalaire correspondante ou l'élément correspondant n'a pas (encore) de valeur. Il est "indéfini". La requête peut cependant porter sur undef. Exemple:
unless (defined $points{'Frédéric'}) { print "Frédéric a quitté la partie"; }.

Attention:

Pour effacer complètement une paire d'éléments dans un hash, il y a la fonction vers le haut delete. Pour effacer complètement un élément d'une liste, vous disposez des fonctions vers le haut pop, vers le haut shift et vers le haut splice.

 vers le hautvers le bas 

unshift - ajouter des éléments au début d'une liste

Ajouter un ou plusieurs nouveaux éléments au début d'une liste. La liste se rallonge d'autant.

Attend comme paramètre:
1. la liste désirée,
2. à n. le ou les éléments à insérer au début de la liste.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @liens=("<a href=\"http://www.selfhtml/selfhtml.com.fr/\">selfhtml.com.fr</a><br>\n",
        "<a href=\"http://www.ac-toulouse.fr/\">toulouse.fr</a><br>\n",
        "<a href=\"http://www.willy-online.de/\">willy-online.de</a><br>\n");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test</title></head><body>\n";
unshift(@liens,"<a href=\"http://www.gtands-gars.fr/\">grands-gars.fr</a><br>\n");
print "@liens";
print "</body></html>\n";

Explication:

L'exemple définit une liste avec trois liens WWW, notés tout prêts comme liens HTML. Du code HTML est envoyé au navigateur. Avant que la liste avec les liens ne soit sortie, un nouvel élément est ajouté au début de la liste avec unshift. Ensuite toute la liste est alors sortie avec maintenant quatre liens, le lien ajouté figurant en premier.

 vers le hautvers le bas 

values - rechercher toutes les valeurs d'un hash

Sauvegarde toutes les valeurs des paires d'éléments d'un hash dans une liste.

Attend comme paramètre:
1. le hash.

Renvoie une liste avec les valeurs des paires d'éléments.

Exemple d'un script CGI complet en Perl:

#!/usr/bin/perl -w

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

my @valeurs_environnement = values(%ENV);
my @variables_environnement = keys(%ENV);
my @environnement;
for(my $i=0; $i < @valeurs_environnement; $i++) {
  $environnement[$i] = $variables_environnement[$i]." = ".$valeurs_environnement[$i];
}
@environnement = sort(@environnement);

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></head><body>\n";
print "<p>Les valeurs d'environnement suivantes sont d�finies:</p>\n";
print "<ul>\n";
foreach(@environnement) {
  print "<li>$_</li>\n";
}
print "</ul>\n";
print "</body></html>\n";

Explication:

L'exemple recherche avec values toutes les valeurs du hash Autre page d'information prédéfini %ENV dans la liste @valeurs_environnement. à l'aide de la fonction vers le haut keys une liste correspondante @variables_environnement est créée pour les noms d'éléments du hash. Ensuite est créée une nouvelle liste @environnement. Dans cette liste sont fusionnées les deux listes pour les noms et les valeurs dans une Autre page d'information boucle for. Chaque élément de la liste @environnement comporte le nom respectif d'une variable d'environnement, d'un signe égal et de la valeur qui s'y rapporte (voir aussi: Autre page d'information Opérateur pour concaténer des chaînes de caractères). Cette nouvelle liste est triée à l'aide de la fonction vers le haut sort. Ensuite du code HTML est envoyé au navigateur et sort la liste triée.

 vers le haut
page suivante Autre page d'information Fonctions pour les calculs
page précédente Autre page d'information Fonctions pour les chaînes de caractères
 

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