SELFHTML/Quickbar
CGI/Perl
Éléments de langage Perl
![]() |
Variables et types de données |
![]() |
|
![]() |
Les variables sont des passages de la mémoire dans lesquels vous pouvez sauvegarder des données dont vous aurez besoin au cours de la procédure du programme. Le contenu sauvegardé dans une variable est désigné comme "valeur". Vous pouvez modifier à tout moment la valeur d'une variable.
En Perl une variable scalaire simple peut sauvegarder un nombre ou une chaîne de caractères.
$nom = "Mathusalem"; $age = 625; $nom_2 = "Pascale Paradis"; $jeunage = sqrt($age); |
#!/usr/bin/perl $valeur = 123456; $valeurpart = substr($valeur,1,3); print $valeurpart; |
Une variable scalaire simple commence par le signe Dollar $, suivi du nom de la variable. Le signe Dollar doit toujours être mentionné quand la variable est utilisée, peu importe si une valeur lui est affectée ou si elle apparaît dans une opération (comme dans le premier des deux exemples ci-dessus la variable $age apparaît dans la fonction sqrt(), qui calcule la racine carrée d'un nombre).
Vous pouvez définir des variables scalaires simples pour des contenus numériques et
pour des chaînes de caractères. Qu'une variable scalaire simple soit un nombre
ou une chaîne
de caractères dépend de la valeur que vous lui affectez ou de son emploi dans
une instruction. Une chaîne de caractères mentionnée doit figurer entre
guillemets. Normalement ce sont des guillemets doubles mais les apostrophes sont
également permises (Pour la différence, voir conventions
pour chaînes de caractères).
Les données en Perl ne sont pas "typées". Si vous avez une chaîne de caractères qui n'est constituée que de signes numériques valables (par exemple "7423.13"), vous pouvez sans problème effectuer avec elle des opérations. De la même façon vous pouvez traiter des valeurs numériques comme des chaînes de caractères. L'exemple d'un petit script Perl ci-dessus en est la démonstration. Dans le script est définie une variable scalaire numérique $valeur. En dessous est utilisée sur cette variable scalaire simple une fonction typique de traitement de chaînes de caractères: l'extraction d'une partie de la chaîne de caractères à l'aide de la fonction substr(). Les paramètres de la fonction signifient: de $valeur est extraite à partir du 2ème signe une chaîne de caractères de 3 signes de long (le 2ème signe est désigné par la mention de 1, étant donné qu'en Perl comme dans la plupart des langages de programmation on commence toujours à compter par 0). Le résultat est sauvegardé dans une variable scalaire simple $valeurpart. Le résultat est "234" et est ensuite sorti. Si vous connaissez d'autres langages de programmation, vous pourrez mesurer à cela les libertés offertes par Perl dans le maniement des variables.
![]() ![]() |
Les listes sont des chaînes de variables scalaires simples interdépendantes. De telles listes ont en Perl une importance primordiale car il est très simple de lire des données dans des listes et de manipuler des listes.
#!/usr/bin/perl @Donnees = ("Jeanne",23,"Marseille","bachot"); print $Donnees[0], " a ", $Donnees[1], " ans, habite à ", $Donnees[2], " et a son ", $Donnees[3]; |
#!/usr/bin/perl for($i = 1;$i <= 9;$i++) { $valeur = $i * $i; push(@carres, $valeur); } for(@carres) { print $_, "\n"; } |
#!/usr/bin/perl @lettres = ("a".."z"); print $lettres[2], "\n"; |
En Perl, une liste est introduite par le signe "chez" @, suivi du nom de la liste. Vous pouvez définir la liste avec ses valeurs comme par exemple dans l'exemple 1 ci-dessus pour la liste @Donnees. Veillez cependant à ce que les données soient incluses entre parenthèses. Les différents éléments de la liste sont à séparer par des virgules.
Vous pouvez également créer la liste en dynamique, comme c'est le cas dans l'exemple 2 dans une boucle. À l'intérieur de la boucle où il est compté de 1 à 9, la liste @carres est remplie en dynamique avec le carré de ces nombres. Cela ne fonctionne cependant qu'avec le soutien de fonctions pour la manipulation de listes, comme dans l'exemple la fonction push(), qui joint les éléments à la fin d'une liste.
L'exemple 3 ci-dessus montre une variante particulière pour remplir une liste avec des données. Pour remplir une liste avec des nombres (de - à) ou des lettres (de - à), il suffit lors de la définition de la liste de mentionner le premier et le dernier élément de la liste, séparés par deux points (dans l'exemple, toutes les minuscules de a à z sont écrites de la sorte dans une liste avec le nombre correspondant d'éléments - @lettres = ("a".."z");).
Si vous remplissez une liste avec des données, respectez les mêmes règles que pour les variables scalaires simples: les chaînes de caractères sont notées entre guillemets, les nombres sans guillemets. À la place de données vous pouvez naturellement insérer des variables scalaires simples dans une liste. Dans ce cas, c'est la valeur de la variable scalaire simple concernée qui est prise dans la liste.
Pour adresser un élément déterminé dans une liste, utilisez le nom de variable de la liste précédé du signe dollar $ - exactement comme pour une variable scalaire simple. Derrière le nom de la liste, notez entre crochets la position dans la liste de l'élément désiré. Pour ce faire, le comptage commence à 0, c'est à dire que le premier élément de la liste nommée @nomliste sera adressé avec $nomliste[0], le deuxième avec $nomliste[1] etc. Dans le premier des exemples ci-dessus, l'observation en est facile.
L'illustration ci-après se réfère encore aux exemples 1 à 3 ci-dessus et éclaire bien ce qui est respectivement sauvegardé dans les listes et comment adresser les éléments de listes correspondants.
Il est tout à fait possible d'affecter une variable scalaire simple à un élément
d'une liste ou inversement. Ainsi vous pouvez par exemple noter:
$prenom =
$Donnees[0];
De même, il est tout à fait possible de copier toute une liste et de l'affecter
à une autre liste, par exemple:
@donneesmemoire = @Donnees;.
Vous pouvez sauvegarder dans une même liste nombres et chaînes de caractères comme dans l'exemple 1 ci-dessus. D'autre part, il n'existe pas de règles sur la longueur maximale d'un élément de liste. Ainsi, vous pouvez sauvegarder comme élément d'une liste une autre liste complète. Vous adressez un élément d'une liste contenue dans une autre liste par exemple avec $Donnees[2][4] (ce qui veut dire que le 3ème élément de la liste @Donnees est lui-même une liste nommée par exemple @proprietes contenant elle même plusieurs éléments et dont le 5ème doit être adressé).
Vous pouvez noter sans définition de liste préalable une instruction telle
que:
$nombres[5] = 43298;
Ainsi est créée automatiquement une liste nommée @nombres qui,
au moment de sa création, contient 6 éléments, à savoir $nombres[0] à $nombres[5].
Seul $nombres[5]possède une valeur, les autres éléments de la liste étant
vides.
Vous pouvez toujours adresser le dernier élément d'une liste avec $nomliste[-1]. Le nombre d'index négatif -1 est réservé à cet effet.
![]() ![]() |
Les listes habituelles sont constituées d'une série de valeurs adressables par des numéros d'index commençant à 0. Le 8ème élément d'une liste nommée @nomliste sera donc adressable par $nomliste[7]. Une liste associative, désignée en Perl par "Hash", sauvegarde par contre deux valeurs par élément de liste: un nom et une valeur. Les valeurs dans un Hash n'ont pas besoin de numéros d'index pour être adressés: elles sont "associées" au nom correspondant.
#!/usr/bin/perl %Donnees = ("Nom","Jeanne","age",23,"ville","Marseille"); print $Donnees{'Nom'}, " a ", $Donnees{'age'}, " ans et habite à ", $Donnees{'ville'}; |
En Perl, le hash est introduit par le signe pourcentage %. Si vous créez un hash et lui affectez des données lors de la définition, les éléments vont toujours deux par deux: le premier élément représente le nom du hash, le deuxième élément la valeur sauvegardée qui peut être adressée par le nom du hash. Ainsi, dans l'exemple ci-dessus les deux premiers éléments "Nom" et "Jeanne" forment la première paire de hash du hash %Donnees.
Pour adresser un élément déterminé dans un hash, utilisez le nom de variable du hash en le faisant précéder toutefois du signe dollar $, exactement comme pour une variable scalaire simple. Derrière le nom du hash, notez entre parenthèses accolades et simples guillemets (apostrophes) le nom de l'élément du hash que vous désirez. Dans l'exemple ci-dessus, on a adressé de la sorte avec $Donnees {'Nom'} la valeur correspondante "Jeanne".
Pour les hashs, donc pour les listes associatives, s'appliquent les mêmes règles et s'offrent les mêmes possibilités que pour les listes normales.
En rapport avec les scripts CGI, les Hashs peuvent être mis en oeuvre très judicieusement. Par exemple, le flux de données d'un formulaire HTML rempli par un utilisateur peut être lu directement dans un hash en sauvegardant comme nom du hash à chaque fois le nom d'un élément de formulaire du fichier HTML, et comme valeur, celle que l'utilisateur a entrée ou choisie pour l'élément considéré.
![]() ![]() |
Si vous vous y connaissez dans le langage C, vous savez ce que sont les pointeurs, et combien ils rendent la programmation efficace. Les références sont des pointeurs sur des types de données auparavant définis (peu importe s'il s'agit de variables scalaires simples, de listes ou de Hashs). Par les références, vous pouvez adresser le contenu d'une variable scalaire simple, d'une liste ou d'un Hash exactement comme par le nom d'origine.
En Perl, la particularité des références est qu'une variable conserve sa
valeur aussi longtemps qu'il existe des références pour cette variable. Ce qui
est important quand vous travaillez avec des sous-programmes,
dans lesquels sont définis des types de données valables localement.
#!/usr/bin/perl &A(); sub B() { print $$referencetexte, "\n"; # valeur n'est plus contenue que dans la référence! } sub A() { my $Texte = "Voici un petit texte"; $referencetexte = \$Texte; # Ici est définie une référence &B(); } |
L'exemple ci-dessus met en lumière la façon d'agir d'une référence. Le
petit script Perl de l'exemple contient deux sous programmes définis soi-même A()
et B(). En premier lieu est est appelé avec &A() le sous-programme correspondant,
dans lequel est définie une variable scalaire simple $Texte dont la
"durée de vie" se limite au sous-programme A(). Ceci
est obtenu en faisant précéder la variable du petit mot my.
Suite à la définition de la variable scalaire simple est définie une
référence à celle-ci. La référence est définie exactement
comme la variable scalaire simple elle-même à la seule différence que l'affectation
de la variable scalaire simple à la référence s'effectue à l'aide d'une barre
oblique inversée \. De cette manière, ce n'est pas la valeur de $Texte
qui est affectée à la référence
$referencetexte, mais seulement l'adresse mémoire à laquelle la valeur de$Texte
se trouve. Ce qui fait que la référence elle-même a besoin de beaucoup moins
de mémoire que la variable scalaire simple.
En dernier lieu, dans le sous-programme A() est appelé le sous-programme B().
Dans le sous-programme B(), la valeur de la référence $Referencetexte
est sortie avec la fonction print. Si c'était l'instruction print $Texte;
qui figurait ici, rien ne serait sorti, étant donné qu'à cet instant la variable $Texte
de A() n'existe plus avec sa valeur. Pourtant, la valeur existe
encore, étant donné qu'elle peut encore être adressée
par la référence $referencetexte.
Pour adresser la valeur d'une référence à une variable scalaire simple,
vous devez mentionner deux signes dollar devant le nom de la référence,
comme dans l'instruction print de l'exemple ci-dessus.
Si - par exemple avec l'instruction print - vous adressez seulement la référence au lieu de sa valeur, l'adresse mémoire à laquelle le contenu de la référence se trouve dans la mémoire de travail sera simplement sortie sous forme hexadécimale.
Vous pouvez définir non seulement des références à des variables scalaires simples, mais aussi à des listes et listes associatives (Hashs) ou bien à des éléments distincts de listes ou hashs. Le tableau suivant propose un récapitulatif de la notation correspondante.
référence à.. | définir la référence | adresser la valeur de la référence | adresser la valeur de la
référence (autre notation possible) |
---|---|---|---|
variable scalaire simple | $referencescalaire = \$scalaire | $$referencescalaire | ${$referenceskalar} |
liste | $referenceliste = \@liste | @$referenceliste | @{$referenceliste} |
élément de la liste | $referenceliste = \@liste | @{$referenceliste}[0] | $referenceliste->[0] |
hash | $referencehash = \%hash | %$referencehash | %{$referencehash} |
élément du hash | $referencehash = \%hash | %{$referencehash}{"nomhash"} | $referencehash->{"nomhash"} |
Ne perdez pas de vue que les références ne sont interprétées qu'à partir de la version Perl 5.0. Les interpréteurs Perl plus anciens envoient des messages d'erreur de syntaxe quand ils rencontrent des références.
N'utilisez toujours les références que si vous avez une bonne raison de le faire!
![]() | |
après:![]() |
![]() |
avant:![]() |
![]() |
SELFHTML/Quickbar
CGI/Perl
Éléments de langage Perl
Serge François, 13405@free.fr