SELFHTML

Chaînes de caractères (Strings)

Page d'information: vue d'ensemble

vers le bas Propriétés de chaînes de caractères
vers le bas Règles pour la notation de chaînes de caractères
vers le bas Caractères de contrôle dans les chaînes de caractères
vers le bas Masquer des signes dans des chaînes de caractères
vers le bas Caractères de fonction dans les chaînes de caractères
vers le bas Notation numérique de signes dans les chaînes de caractères
vers le bas Opérations et fonctions pour les chaînes de caractères

 vers le bas 

Propriétés de chaînes de caractères

Les chaînes de caractères sont en Perl autres qu'en C par exemple, elles ne constituent pas un tableau avec des caractères, mais un seul et unique "élément". Chaque chaîne de caractères est potentiellement infiniment grande et n'est limitée dans sa taille que par la mémoire disponible. Il n'y a donc aucun problème à sauvegarder des quantités de données plus importantes dans une chaîne de caractères.

Une propriété importante des chaînes de caractères en Perl est également qu'elles peuvent contenir les signes que l'on veut. Il n'y a donc pas de signe réservé comme en C par exemple le signe avec la valeur 0 pour l'affichage de la fin de la chaîne de caractères. Même d'autres caractères de contrôle qui sont employés comme caractères de contrôle typiques pour la fin, par exemple le caractère de contrôle pour le passage à la ligne peuvent être placés à souhait dans des chaînes de caractères en Perl. Les chaînes de caractères en Perl peuvent aussi, pour cette raison, enregistrer et traiter sans problème des données binaires.

Le type de variable prévu pour sauvegarder une chaîne de caractères distincte est la Autre page d'information scalaire.

 vers le hautvers le bas 

Règles pour la notation de chaînes de caractères

Pour la notation directe de chaînes de caractères, vous pouvez au choix placer celles-ci entre guillemets ou entre apostrophes ou utiliser pour le faire l'opérateur q ou bien qq. Pour des chaînes de caractères de plusieurs lignes, vous disposez de ce qu'on appelle les "documents signalés". Il y a quelques différences sémantiques entre les notations:

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

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

print <<'ENTETE';
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Sortie du test</title>
</head><body>
ENTETE

my $nom = "Mathusalem";
my $age = 625;

print "$nom est un vieil homme, tr�s vieil homme. Il a $age ans<br>\n";
print '$nom est un vieil homme, tr�s vieil homme. Il a $age ans<br>\n';

print qq($nom est un vieil homme, tr�s vieil homme. Il a $age ans<br>\n);
print q($nom est un vieil homme, tr�s vieil homme. Il a $age ans\n);

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

Explication:

Dans l'exemple, l'entête HTTP ainsi que les premières lignes HTML sont sorties à l'aide d'un "document signalé". Les documents signalés ont le même effet que l'élément pre en HTML. La chaîne de caractères y est formatée comme elle est notée dans le texte source. Un document signalé commence par la suite de caractères d'ouverture << et le nom d'un délimiteur de fin (sans l'exemple: ENTETE). Le nom peut être placé entre apostrophes ou entre guillemets; elles ont le même effet que pour des chaînes de caractères "normales". Avec des guillemets les variables à l'intérieur du document signalé sont interpolées, pas avec des apostrophes. Quand vous omettez simplement les guillemets/apostrophes, Perl prend des guillemets. Entre la suite de caractères << et le nom, aucun espace ne doit figurer. Le document signalé est terminé par le délimiteur de fin (sans guillemets), qui doit être placé seul sur une ligne sans espace ni devant, ni derrière. La ligne doit absolument être clôturée par un passage à la ligne.

Dans l'exemple ci dessus, sont ensuite déclarées deux scalaires $nom et $age auxquelles une valeur initiale est attribuée. Ensuite avec des instructions print la même chaîne de caractères est sortie plusieurs fois - d'abord une fois avec des guillemets, ensuite avec des apostrophes. Les deux fois, la chaîne de caractères contient incorporées dans la phrase les scalaires $nom et $age. Lors de la sortie, on remarque que avec l'utilisation de guillemets, les scalaires $nom et $age sont remplacées par les valeurs qu'elles contiennent (jargon de la branche: Interpolation), tandis qu'avec l'emploi d'apostrophes sont simplement sorties, aux endroits correspondants, les chaînes de caractères $nom et $age. De plus pour la version avec les apostrophes le vers le bas caractère de contrôle \n noté à la fin est sorti tel qu'il figure en tant que chaîne de caractères, alors que le caractère de contrôle était interprété avec l'utilisation de guillemets, à savoir créait effectivement un passage à la ligne dans le texte sorti.

Cela signifie donc: utilisez des guillemets quand dans une chaîne de caractères, les variables mentionnées et les caractères de contrôle doivent être interprétés, et utilisez les apostrophes quand il ne le faut pas.

Les deux opérateurs qq et q correspondent aux guillemets et aux apostrophes. Avec qq Les variables et caractères de contrôle sont interprétés, avec q par contre, ils ne le sont pas. L'utilisation de qq et q n'est pas si courante que l'utilisation de guillemets, pourtant elle peut tout à fait rendre le texte source plus lisible. Dans l'exemple ci-dessus, les parenthèses ont été choisies pour inclure le contenu de qq et de q. Vous pouvez cependant également utiliser d'autres signes pour le faire. Pour les signes qui possèdent un pendant, par exemple < et >, { et } ou bien [ et ], celui-ci est attendu comme délimiteur de fin. Perl veille ensuite aux imbrications dans la chaîne de caractères. Cette mise entre parenthèses est particulièrement bien appropriée pour représenter du code Perl à l'intérieur d'une chaîne de caractères. Quand vous utilisez d'autres signes comme délimiteurs, veillez à ce que ce signe ne soit pas placé dans la chaîne de caractères.

Outre ces formes existe encore qx ou comme alternative ce qu'on appelle les Backticks. Grâce à elles vous créez des chaînes de caractères qui sont transcrites par Perl en appel système. De plus amples détails à ce sujet dans la partie Autre page d'information qx(...) - exécuter d'autres programmes ou scripts et capturer STDOUT.

 vers le hautvers le bas 

Caractères de contrôle dans les chaînes de caractères

Pour la notation de quelques caractères de contrôle importants, Perl dispose d'une syntaxe de notation spéciale qui s'apparente au langage C. De tels signes sont introduits par une barre oblique inversée \. Derrière suit une lettre qui désigne le caractère de contrôle. Ces caractères de contrôle ne sont interprétés que dans des chaînes de caractères placées entre guillemets "..." ou bien dans qq(...), et aussi uniquement si le canal de sortie offre les possibilités correspondantes. Il existe les caractères de contrôle suivants:

Notation Signification Exemple
\a Avertissement sonore (Beep) print "\a"
\b Retour d'un signe en arrière print "leurs\b"
\e Signe d'échappement pour introduire des séquences Escape print "\e[A"
\f Caractère de contrôle pour saut de page print "fin de page\fdébut de page"
\n Caractère de contrôle pour passage à la ligne. Le code exact du caractère dépend du système d'exploitation. Sous Unix par exemple c'est le code ASCII 10, tandis que sur Apple-Macintosh il s'agit du code ASCII 13 et sous DOS une suite de caractères des signes ASCII 13 et 10. print "fin de ligne\ndébut de ligne"
\r Caractère de contrôle pour le retour de chariot. Le code exact du caractères dépend du système d'exploitation. Sous Unix et Dos, c'est par exemple le code ASCII 13, tandis que chez Apple-Macintosh il s'agit du code ASCII 10. print "chariot\rretour chariot"
\t Caractère de contrôle pour le tabulateur print "age:\t32"

 
 vers le hautvers le bas 

Masquer des signes dans des chaînes de caractères

Vous devez masquer les signes entre lesquels la chaîne de caractères est placée, au cas où ces mêmes signes sont placés dans la chaîne de caractères. Pour ce faire, la barre oblique inversée est utilisée comme caractère masquant. Étant donné maintenant que la barre oblique inversée reçoit une signification particulière par cette propriété, elle doit elle-même aussi être masquée au cas ou elle est employée dans la chaîne de caractères comme signe normal.

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

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

print "Content-type: text/plain\n\n";

print "Une sortie print typique est \"Hello monde\\n\";\n";
print "Une sortie print typique est 'Hello monde\\n';\n";

print 'Une sortie print typique est "Hello monde\n";',"\n";
print 'Une sortie print typique est \'Hello monde\n\';';

Explication:

L'exemple envoie du texte pur au navigateur appelant et sort ici avec des instructions print quatre fois la même phrase. Pour les deux premières instructions, des guillemets sont employées. Comme on le voit dans l'exemple, il faut ici masquer le signe " par \". La barre oblique inversée \, doit elle aussi être masquée et cela avec \\.
Les deux instructions du bas emploient par contre des apostrophes. Il ne faut ici masquer que ce signe quand on le rencontre et cela avec \' - c'est le cas dans la dernière instruction.

 vers le hautvers le bas 

Caractères de fonction dans les chaînes de caractères

Perl dispose de certains caractères de contrôle qui lui sont propres et qui ont un effet fonctionnel sur le signe qui noté derrière . Ces signes sont introduits par un barre oblique inversée \. Derrière suit une lettre qui désigne la fonction. Ces caractères de fonction ne sont interprétés que dans les chaînes de caractères placées entre guillemets "..." ou bien entre qq(...). Il existe les caractères de fonction suivants:

Notation Signification Exemple
\U Majuscule (upper case). Même effet qu'avec Autre page d'information uc. print "\UGrand cri"
\L Minuscules (lower case). Même effet qu'avec Autre page d'information lc. print "\LCp Dat1.TXT Dat2.TXT"
\u Premier caractère en majuscules. Même effet qu'avec Autre page d'information ucfirst. print "\ugrand et petit"
\l Premier caractère en minuscules. Même effet qu'avec Autre page d'information lcfirst. print "\lGrand et petit"
\E Délimiteur de fin pour \U et \L. print "\UTout en majuscules? \ENon, pas tout"

 
 vers le hautvers le bas 

Notation numérique de signes dans les chaînes de caractères

Vous pouvez aussi noter des signes quelconques d'une chaîne de caractères avec leur valeur numérique. Ne sont toutefois permises que les mentions en octal ou en hexadécimal.

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

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

print "Content-type: text/plain\n\n";

print "\123\145\162\147\145 octal\n";
print "\x53\x65\x72\x67\x65 hexadezimal\n";
print "Serge normal\n";

Explication:

L'exemple envoie du texte pur au navigateur appelant et et sort ici avec des instructions print trois fois le mot Serge et un passage à la ligne. Pour la première instruction, les lettres sont notées sous leur forme octale, pour la deuxième instruction, sous leur forme hexadécimale. Pour le forme octale, les signes sont représentés par une barre oblique inversée, suivi du nombre (sont permis pour la forme octale les chiffres de 0 à 7). Pour la forme hexadécimale, les signes commencent également par une barre oblique inversée suivie toutefois d'un x et derrière le nombre (sont permis pour la forme hexadécimale les chiffres de 0 à 9 et A à F).

 vers le hautvers le bas 

Opérations et fonctions pour les chaînes de caractères

Une des forces de Perl est la manipulation de chaînes de caractères. C'est pourquoi Perl met à disposition quantité d'opérations et de fonctions pour le traitement des chaînes de caractères.

Concaténer des chaînes de caractères:
Un opérateur important pour les chaînes de caractères et l'opérateur point qui permet c'accrocher une chaîne à une autre. Voir à ce sujet Autre page d'information Opérateur pour concaténer des chaînes de caractères

Extraire des parties de chaînes de caractères: Souvent il est important d'extraire une partie bien déterminée d'une chaîne de caractères, par exemple le nom de domaine d'une URI. Pour ce faire, Perl propose les fonctions suivantes: Autre page d'information index et Autre page d'information substr.

Recherche et remplacement dans des chaînes de caractères:
Perl permet le parcours ciblé de chaînes de caractères. De la même façon il est possible de rechercher et remplacer. La clé pour le faire sont les Autre page d'information expressions régulières.

Rechercher la longueur d'une chaîne de caractères:
Pour cela existe en Perl la fonction Autre page d'information length.

Scinder une chaîne de caractères en plusieurs chaînes:
Beaucoup de chaînes de caractères contiennent ce qu'on appelle les signes de séparation par exemple pour les lignes lues d'un fichier ayant la virgule comme signe de séparation. Dans ce cas, il est judicieux de faire une Autre page d'information liste avec les différentes valeurs qui constituent la chaîne de caractères. Pour le faire, il y a la fonction Autre page d'information split.

 vers le haut
page suivante Autre page d'information Nombres
page précédente Autre page d'information Variables prédéfinies en Perl
 

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