SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
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 scalaire.
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:
#!/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"; |
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 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 qx(...) - exécuter d'autres programmes ou scripts et capturer STDOUT.
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:
|
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.
#!/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\';'; |
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.
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:
|
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.
#!/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"; |
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
).
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 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: index et 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 expressions régulières.
Rechercher la longueur d'une chaîne de caractères:
Pour cela existe en Perl la fonction 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 liste avec les différentes valeurs qui constituent la chaîne de caractères. Pour le faire, il y a la fonction split.
Nombres | |
Variables prédéfinies en Perl | |
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