Substitution paramétrable

Le
cwpbl
Bonjour,

Dans un script, j'ai une séquence du type :

s/([abc]+) *([abc]+)/$2 - $1/gi;

Ici, "a b" donne evidemment "b - a"

Mais si j'écris pour paramétrer le second membre :

my $a='$1';
my $b='$2';
s/([abc]+) *([abc]+)/$b - $a/gi;

le $1 n'est reconnu que comme le texte $1, pas le motif $1. Comment
faire pour pouvoir "paramétrer" mon expression ?
Merci pour vos idées.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #20556271
À (at) Sat, 14 Nov 2009 12:04:38 +0100,
cwpbl
Dans un script, j'ai une séquence du type :

s/([abc]+) *([abc]+)/$2 - $1/gi;

Ici, "a b" donne evidemment "b - a"

Mais si j'écris pour paramétrer le second membre :

my $a='$1';
my $b='$2';
s/([abc]+) *([abc]+)/$b - $a/gi;

le $1 n'est reconnu que comme le texte $1, pas le motif $1. Comment
faire pour pouvoir "paramétrer" mon expression ?



En utilisant des groupes nommés :

$a = "x";
$b = "y";
$text =~ s/(?<x>[abc]+) *(?<y>[abc]+)/$+{$b} - $+{$a}/gi;




--
Paul Gaborit - Perl en français -
Stephane CHAZELAS
Le #20561611
2009-11-14, 12:04(+01), cwpbl:
Dans un script, j'ai une séquence du type :

s/([abc]+) *([abc]+)/$2 - $1/gi;

Ici, "a b" donne evidemment "b - a"

Mais si j'écris pour paramétrer le second membre :

my $a='$1';
my $b='$2';
s/([abc]+) *([abc]+)/$b - $a/gi;

le $1 n'est reconnu que comme le texte $1, pas le motif $1. Comment
faire pour pouvoir "paramétrer" mon expression ?
Merci pour vos idées.



Une possible solution, pas tres elegante:

my $a = '$1';
my $b = '$2';
s/([abc]+) *([abc]+)/eval ""$b - $a""/gei;

--
Stéphane
cwpbl
Le #20562831
cwpbl a écrit :
Bonjour,

Dans un script, j'ai une séquence du type :

s/([abc]+) *([abc]+)/$2 - $1/gi;

Ici, "a b" donne evidemment "b - a"

Mais si j'écris pour paramétrer le second membre :

my $a='$1';
my $b='$2';
s/([abc]+) *([abc]+)/$b - $a/gi;

le $1 n'est reconnu que comme le texte $1, pas le motif $1. Comment
faire pour pouvoir "paramétrer" mon expression ?




Merci pour vos 2 réponses.

Je ne connaissais pas les groupes nommés de la première.
La 2ème est également intéressante si je veux utiliser perl en version <
5.10.
Publicité
Poster une réponse
Anonyme