next up previous index
suivant: Utilisation: translation monter: Les expressions régulières précédent: Valeurs de retour   Index


Utilisation : substitution

La syntaxe de la fonction de substitution est analogue à celle utilisée par sed, vi, ..., mises à part les quelques différences syntaxiques d'écriture des regexps. De manière analogue à la fonction de comparaison, la fonction de substitution s'applique par défaut à la variable $_. Pour la faire s'appliquer à une variable quelconque, il faut utiliser la notation :

$var =~ s/REGEXP/chaîne/egismox;

Les modificateurs qui suivent l'expression sont identiques à ceux applicables à la fonction de comparaison.

Un nouveau modificateur est disponible : e. Il précise que l'expression de remplacement est une expression à évaluer, ce qui permet d'utiliser le résultat d'une opération dans la chaîne de remplacement.

Par exemple, pour convertir des caractères du type %xxxx est un code ASCII en hexadécimal dans le caractère correspondant, il suffit d'écrire:

$chaine =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Une petite explication ? On veut effectuer une substitution (s/.../.../) sur la variable $chaine. On cherche un caractère % suivi de deux caractères valides en hexadécimal ([a-fA-F0-9). On mémorise ces deux caractères, dans la variable $1 puis on remplace les trois caractères (les deux mémorisés plus le % qui les précéde) par le résultat de la fonction pack("C", hex($1)), qui évalue le contenu de $1 en hexadécimal, puis affiche le caractère correspondant à cette valeur. On effectue cette opération tant qu'il reste des possibilités (le modificateur g).

Prenez votre temps pour essayer de comprendre le fonctionnement de cette expression régulière. Ensuite, essayez de comprendre les transformations qui permettent d'arriver à l'expression équivalente :

$chaine =~ s/%([a-f0-9]{2})/pack("C", hex($1))/egi;

next up previous index
suivant: Utilisation: translation monter: Les expressions régulières précédent: Valeurs de retour   Index
Olivier Aubert
1999-06-01