Para no abrir un nuevo hilo, coloco mi problema aquí. Al actualizar
Perl a la versión
5.18.2 me percato que el
script ya no funciona como antes.
Buscando en los foros, me percato de las advertencias que da esta versión con el uso de
given/when, lo cual se puede saltear añadiendo
Using perl Syntax Highlighting
no if $] >= 5.018, warnings => "experimental::smartmatch";
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
el tema es que el
script ya no funciona del todo bien, intenté cambiando el código a:
Using perl Syntax Highlighting
## Cambiar
while (
$cuerpo =~ / $marca
| $comentario
| $definedel
| $indefinedel
| $del .+? $del # delimitado
/gimx
) {
my ( $pos_inicial, $pos_final ) = ( $-[0], $+[0] ); # posiciones
my $encontrado = ${^MATCH}; # lo encontrado
if ( $encontrado eq /$definedel/ ) { # definimos delimitador
$del = $+{del};
$del = "\Q$+{del}" if substr( $del, 0, 1 ) ne '\\'; # es necesario "escapar" el delimitador
}
elsif ( $encontrado eq /$indefinedel/ ) { # indefinimos delimitador
$del = $no_del;
}
else { # Aquí se hacen los cambios
while ( my ( $busco, $cambio ) = each %cambios ) {
$encontrado =~ s/\Q$busco\E/$cambio/g; # es necesario escapar $busco, ya que contiene caracteres extraños
}
substr $cuerpo, $pos_inicial, $pos_final - $pos_inicial, $encontrado; # insertamos los nuevos cambios
pos($cuerpo) = $pos_inicial + length $encontrado; # re posicionamos la siguiente búsqueda
}
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
lo cual creo que está correcto, pero no obtengo el resultado esperado.
Si quito la línea
Using perl Syntax Highlighting
use v5.16;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
strict me arroja errores en las líneas donde se encuentra
given/when, entonces, ¿cuáles son los cambios que debo hacer para cambiar
given/when a
if/elsif/else?
Mi idea es dejar el
script sin
given/when (u otra característica experimental de ser posible) puesto que será quitado o modificado en la versión
5.20 (acorde a lo que entendí en los foros que busqué) por lo tanto, prefiero escribir el código usando
if/elsif/else para no tener problemas en el futuro.
Saludos,
Pablo