$s =~ s/(id=")(".*)/$1123$2/; # Use of uninitialized value $1123 in concatenation (.) or string
A pesar de que se esperaba que para sustituir $1
, Perl lo ve como la variable $1123
. Perl no tiene forma de saber que te refieres a $1
. Así que hay que limitar la variablisation a $1
especificando como ${1}
:
$s =~ s/(id=")(".*)/${1}123$2/;
Siempre es una buena idea incluir lo siguiente en la parte superior de las secuencias de comandos. Le ahorrarán mucho tiempo y esfuerzo.
use strict;
use warnings;
Por ejemplo, ejecutar la secuencia de comandos con los módulos anteriores incluyeron los resultados en el mensaje de error:
Use of uninitialized value $1123 in concatenation (.) or string at /tmp/test.pl line 7.
(no tener en cuenta el nombre del script informado y números de línea.) Se establece claramente lo que espera un intérprete de perl. afirmaciones
Otro abordaje con mirada atrás y-Look-Ahead:
$s =~ s/(?<=id=")(?=")/123/;
muchas gracias. Busqué sintaxis $ {1}. –
Prefiero la manera detrás y adelante – justintime
@justintime, Bonificación: la versión con las vistas es más rápida porque no tiene capturas. – ikegami