2010-10-03 8 views
2

J'essaie de faire une recherche et de remplacer par des variables. Dans ce cas, les variables que j'ai tirées d'un match précédent. Voici mon code:Comment utiliser une variable Perl dans une expression régulière?

$fileContentToAlter =~ s/$2/$1/g; 

Maintenant, je me rends compte dans cet état, il est lu à tort comme $ a sa propre signification à l'intérieur d'une expression rationnelle. J'ai fait quelques recherches sur le web et j'ai lu que les doubles quotes pouvaient régler le problème car cela interpolait mais cela ne fonctionnait pas pour moi. Je ne vais pas mentir, c'est un travail à faire, donc je ne m'attends pas à une réponse complète. Juste un coup de pouce dans la bonne direction.

+0

variables de capture sont étrangères et complètement évitable: 'mon ($ ce, $ que) = $ match_me = ~/(capture_this) (capture_that) /;' – daxim

+0

Nice, je ne même pas penser à cela. Je dois enrouler la tête autour de perl car c'est tellement différent de ce que j'ai l'habitude de faire. Mais je commence vraiment à l'aimer. – Pinsickle

Répondre

5

Évitez '$ 1' et '$ 2' car ce sont des métacaractères regex.

use strict; 
use warnings; 

my $val1 = "abc"; 
my $val2 = "def"; 
while (<>) 
{ 
    s/$val1/$val2/g; 
    print; 
} 
+0

Merci pour l'aide. Je commençais à me demander si je devais simplement créer une variable pour affecter mes résultats à 1 et 2 $. – Pinsickle

Questions connexes