Programmation Perl/Chaînes de caractères

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Ébauche

Cette page est considérée comme une ébauche à compléter. Si vous possédez quelques connaissances sur le sujet, vous pouvez les partager en éditant dès à présent cette page (en cliquant sur le lien « modifier »).

Ressources suggérées : Aucune (vous pouvez indiquer les ressources que vous suggérez qui pourraient aider d'autres personnes à compléter cette page dans le paramètre « ressources » du modèle? engendrant ce cadre)

Le langage Perl permet de gérer les chaînes de caractères.

Comme il s'agit d'une langage ancien, il a d'abord été conçu pour gérer les anciens codages de textes (ASCII, iso-8859-x, etc.).

Le langage Perl s'adapte tout de même à son époque, et il est en particulier possible de traiter des textes Unicode. Si vous ne connaissez pas Unicode, vous pouvez le découvrir avec le livre À la découverte d'Unicode.

Des pages de manuels de Perl sont dédiées à l'Unicode, comme perlunicode ou perluniintro.

Fonctions de manipulation des chaînes[modifier | modifier le wikicode]

substr 
Extrait une sous-chaîne.
#!/usr/bin/perl
use strict;
use warnings;

my $chaine="babebibobu";
# extraction
print substr($chaine,4,2)."\n"; # bi

# extraction du 5e à l'antépénultième
$chaine="babebibobu";
print substr($chaine,4,-2)."\n"; # bibo

# comptage depuis la fin
$chaine="babebibobu";
print substr($chaine,-7,2)."\n"; # eb
#
# jusqu‘à l'avant-dernier
$chaine="babebibobu";
print substr($chaine,-7,-1)."\n"; # ebibob

# remplacement de 4 caractères par XX
$chaine="babebibobu";
substr($chaine,2,4,"XX");
print $chaine."\n"; # baXXbobu

# gommage = remplacement vide
$chaine="babebibobu";
substr($chaine,2,2,"");
print $chaine."\n"; # babibobu

# incrustation = remplacement sur une longueur de zéro
$chaine="babebibobu";
substr($chaine,4,0,"YY");
print $chaine."\n"; # babeYYbibobu

# préfixage
$chaine="babebibobu";
substr($chaine,0,0,"PREF_");
print $chaine."\n"; # PREF_babebibobu

# suffixage
$chaine="babebibobu";
substr($chaine,length $chaine,0,"_SUFF");
print $chaine."\n"; # babebibobu_SUFF

###########################
# autre syntaxe

# remplacement
$chaine="babebibobu";
substr($chaine,2,3)="XX";
print $chaine."\n"; # baXXibobu

# incrustation
$chaine="babebibobu";
substr($chaine,6,0)="YY";
print $chaine."\n"; # babebiYYbobu

# gommage
$chaine="babebibobu";
substr($chaine,2,6)="";
print $chaine."\n"; # babu

# préfixage
$chaine="babebibobu";
substr($chaine,0,0)="PREF_";
print $chaine."\n"; # PREF_babebibobu

# suffixage
$chaine="babebibobu";
substr($chaine,length $chaine,0)="_SUFF";
print $chaine."\n"; # babebibobu_SUFF


length 
Calcule la longueur d'une chaîne.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;

my $chaine="babebibobu";

print length $chaine; # 10
print "\n";

# lettres accentuées du français = 2 octets
my $chaine2="àâéèêëîïôùûçœæ";
print length $chaine2; # 28
print "\n";

# caractères spéciaux
print length "\t"; # 1 = UNE tabulation
print "\n";
print length "\\\n"; # 2 = une \ littéralement + un retour de chariot
print "\n";

# accepte toute chaîne quel que soit l‘emberlificotage de fonctions qui la crèe.
print length "devant".substr($chaine,-7,-1)x 3 ."derrière\n".sprintf ("%.5f",6/7)  ; # 41 dont devant = 6 ;  eBIboB x 3 = 18 ; derrière\n = 10 (è = 2) ; 0.85714 = 7 caractères
print "\n";
lc 
Transforme une chaîne en minuscules.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;

my $chaine="BaBeBiBOBU";
print lc "$chaine.\n"; # babebibobu

my $chaine2="fichier.TXT";
print  ucfirst substr( $chaine2,0,-4). lc substr( $chaine2,-4,4)."\n" ;# Fichier.txt
uc 
Transforme une chaîne en majuscules.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;
my $chaine="BaBeBiBOBU";
print uc $chaine."\n"; # BABEBIBOBU
lcfirst 
Transforme le premier caractère d'une chaîne en minuscule.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;

my $chaine2="Cornélien";
print lcfirst $chaine2."\n"; # cornélien
ucfirst 
Transforme le premier caractère d'une chaîne en majuscule.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;

my $chaine="corneille";
print ucfirst $chaine."\n"; # Corneille

my $chaine2="corneille, (auteur du cid.)";
print ucfirst substr( $chaine2,0,-5). ucfirst substr( $chaine2,-5,5)."\n" ; # Corneille, (auteur du Cid.)
chop 
Supprime le dernier caractère d'une chaîne.

Il est utilisé surtout pour effacer les \n ("entrées" ou Carriage Return).

#!/usr/bin/perl -w
use strict;

# chop efface le dernier caractère de chaque item d'un liste
my @tableau =  ( "a\n" , "b\n", "c\n" );
print @tableau; # a b c sur 3 lignes distinctes

chop @tableau;
print @tableau; # abc accolés : les \n ont disparu

print "\n";

# chop renvoie son dernier effacement
my @tableau2 =  ( "vaches" , "veaux" );

print chop @tableau2;# le x de "veaux"
print "\n";

print @tableau2;# vacheveau
print "\n";
chomp 
Permet de supprimer plusieurs caractères à la fin d'un chaîne.
#!/usr/bin/perl -w
use strict;

# création d‘un fichier cobaye de 3 lignes
# Descripteur de fichier = File Handle
open ( Descr0,'>','./cobaye') or die ("écriture impossible $!");
print Descr0 "premier\ndeuxieme\ntroisieme\n";
close(Descr0);

# lecture sans chomp -> affichage des 3 lignes
open (Descr1,'<','./cobaye') or die ("ouverture impossible $!");
while(defined (my $ligne = <Descr1> ) ){
    print $ligne;
}

# chomp efface le \n de chaque ligne lue dans cobaye -> affichage sur une seule ligne
open (Descr2,'<','./cobaye') or die ("ouverture impossible $!");
while(defined ( my $ligne = <Descr2> ) ){
    chomp $ligne;
    print $ligne;
}
close(Descr2);
close(Descr1);
print "\n";
reverse 
Inverse l'ordre des caractères d'une chaîne.
#!/usr/bin/perl -w
use strict;

# renversement d‘une liste
my @tableau = qw(premier deuxieme troisieme quatrieme);
print reverse @tableau; # quatriemetroisiemedeuxiemepremier

print "\n";
# renversement d‘une chaîne (le 3e item)
my $envers= reverse $tableau[2];
print $envers;# emeisiort