Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Substitution paramétrable

3 réponses
Avatar
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.

3 réponses

Avatar
Paul Gaborit
À (at) Sat, 14 Nov 2009 12:04:38 +0100,
cwpbl écrivait (wrote):
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 - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Stephane CHAZELAS
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
Avatar
cwpbl
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.