• Publicidad

Ayuda con sustitución en Perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ayuda con sustitución en Perl

Notapor tomas_fnm » 2006-05-14 19:05 @837

Hola.

Mi duda es con el siguiente código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $string = "esto es un\nensayo en perl\nparece q resulta";
  2.  
  3. print "$string\n\n";
  4.  
  5. $string =~ s/un\sensayo/una\nprueba/m;
  6. $string =~ s/resulta/funciona/m;
  7.  
  8. print "$string\n\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Según entiendo, cuando ocupo la opción "m" en s/expr1/expr2/ es para que el interpretador no suponga que va a trabajar con líneas simples, sino que con variables multilíneas... pero al probar el código anterior, el resultado es el mismo... con o sin la opción "m"...

Ojalá me puedan guiar un poco...

De antemano, gracias :wink:
Avatar de Usuario
tomas_fnm
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-05-14 18:54 @829

Publicidad

Notapor kidd » 2006-05-14 19:28 @853

Hola.

Bienvenido al foro. Está raro tu resultado, pues a mi sí me funciona, al ejecutar obtengo el siguiente resultado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
esto es un
ensayo en perl
parece que resulta

esto es una
prueba en perl
parece que funciona
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

correccion

Notapor tomas_fnm » 2006-05-14 19:31 @855

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. n\nensayo en perl\nparece que resulta";
  2.  
  3. print "$string\n\n";
  4.  
  5. $string =~ s/un\nensayo/una\nprueba/m;  # en esta línea decía $string =~ s/un\sensayo/una\nprueba/m;
  6.                                        # el cambio es en "/un\sensayo/" por "/un\nensayo/"
  7. $string =~ s/resulta/funciona/m;
  8.  
  9. print "$string\n\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Aunque no es gran diferencia... :wink:
Avatar de Usuario
tomas_fnm
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-05-14 18:54 @829

Notapor tomas_fnm » 2006-05-14 19:36 @858

Gracias por la bienvenida... pero mi duda es sobre la opción "m" (porque a mi también me resulta :) )

La cosa es que el mismo código lo compilé con y sin la opción "m" y arroja el mismo resultado...

Lo necesito para una tarea... un convertidor de html a tex, y como ya debes saber me puedo encontrar con expresiones como
<h1> texto
</h1>


y creo que s/expr1/expr2/ me puede servir...
Avatar de Usuario
tomas_fnm
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-05-14 18:54 @829

Notapor explorer » 2006-05-15 05:15 @260

Esto está más descrito en perlre. Aquí va un esbozo:
  • El modificador m indica que el texto a analizar es multilínea. Esto quiere decir que los caracteres especiales '^' y '$' dentro de la expresión regular, en vez de coincidir con el comienzo y final de todo el texto, ahora coinciden con el principio y final de cada una de las líneas contenidas en ese texto
  • El modificador s trata a todo el texto como una sola línea (s de 'single'), por lo que entonces el comodín '.' coincide también con los caracteres de final de línea.

El resultado que te sale al principio es el mismo porque '\s' coincide con cualquier "espacio en blanco", y eso también lo es un carácter de fin de línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $texto =       "esto es un\nensayo en perl\nparece que resulta";
  2. $texto =~ s/\s/./g;
  3. print $texto; # esto.es.un.ensayo.en.perl.parece.q.resulta
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En resumen, que m te serviría si quisieras incluir dentro de la expresión regular un control sobre la posición del texto a buscar (si está al lado del principio o del final de una línea), pero no para hacer sustituciones simples.

En el caso del HTML que propones, se podría entonces hacer de la misma forma que propones al principio:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $string = "<h1> texto
  2. </h1>";
  3. $string =~ s/<h1>\s*(.+?)\s*<\/h1>/{$1}/i;
  4. print $string; # {texto}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Fíjate que usamos '\s' tanto para quitar los espacios en blanco como los retornos de carro.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor tomas_fnm » 2006-05-16 17:03 @752

Gracias por la ayuda :)
Avatar de Usuario
tomas_fnm
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-05-14 18:54 @829


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 25 invitados