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.
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.

Poser une question


cwpbl
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 -
Une possible solution, pas tres elegante:
my $a = '$1';
my $b = '$2';
s/([abc]+) *([abc]+)/eval ""$b - $a""/gei;
--
Stéphane
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.