En perl, la référence arrière en remplacement de texte suivie par le numérique littérale

J'ai de la difficulté avec une référence arrière dans mon texte de remplacement qui est suivi par un littéral. J'ai essayé ce qui suit:

perl -0pi -e "s/(<tag1>foo<\/tag1>\n\s*<tag2>)[^\n]*(<\/tag2>)/${varWithLeadingNumber}/" file.xml
perl -0pi -e "s/(<tag1>foo<\/tag1>\n\s*<tag2>)[^\n]*(<\/tag2>)/\g{1}${varWithLeadingNumber}\g{2}/" file.xml

Le premier, bien entendu, les causes des problèmes parce que ${varWithLeadingNumber} commence par un nombre, mais je pensais que le \g{1} construire dans ma deuxième tentative au-dessus de était censé résoudre ce problème. Je suis à l'aide de perl 5.12.4.

  • Êtes-vous sûr que votre problème n'est pas avec le shell? J'aimerais placer le script dans des guillemets simples, sauf pour la partie collecte les variables shell, juste de couper vers le bas sur le nombre de barres obliques inverses à s'inquiéter.
  • Je l'ai juste essayé, par exemple, perl -0pi -e 's/(<tag1>foo<\/tag1>\n\s*<tag2>)[^\n]*(<\/tag2>)/\g{1}25\g{2}/' file.xml, et le résultat était le même. Le texte de remplacement finit par être g{1}25g{2}.
InformationsquelleAutor jonderry | 2011-09-26