• Publicidad

Captura y dos sustituciones. ¿Es posible simplificarlo?

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor alfplayer » 2011-07-30 14:03 @627

Hola, soy nuevo. Me llamo Esteban. Estoy aprendiendo Perl.

Este código extrae el título de un archivo HTML tomado de la entrada y hace dos sustituciones para eliminar algunos espacios en blanco. Para desarrollarlo tuve en cuenta que títulos en páginas HTML encontradas en la web pueden estar en varias líneas o en una línea compartida con otro código HTML (algunas páginas hasta tienen todo el código HTML en una única línea). ¿Es posible simplificarlo o llevarlo a una forma más corta?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -ln0
  2.  
  3. m/<title>(.*?)<\/title>/sg ;
  4. $_=$1 ;
  5. s/\s+/\ /g ;
  6. s/(^\s|\s$)*//g ;
  7. print "$_\n" ;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
alfplayer
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina

Publicidad

Re: Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor explorer » 2011-07-30 14:39 @652

Bienvenido a los foros de Perl en español, alfplayer.

Simplificarlo más... complicado...

Esta es mi versión (que no he probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. ($_) = m{<title>(.*?)</title>}s;
  3. s/\s+/ /g;
  4. s/^\s|\s$//g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Cambiando 'n' por 'p', se imprime el valor de '$_' al final del programa.

La última expresión regular no tiene comodín de repetición '*' o '+' porque todas las secuencias consecutivas de varios blancos han sido reducidos a uno solo, con la primera exp. reg.
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

Re: Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor alfplayer » 2011-07-31 12:54 @579

Gracias, explorer.

Aprendí varias cosas.

Ahora estoy usando este código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. $\="\n" ;
  3. ($_) = m?<title>\s*(.*\?)\s*</title>?is ;
  4. s/\s+/ /g ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Como alternativa a la última línea (usando -n y no -p), ahora sé también que puedo usar $,=" " seguido de print split /\s+/ o print m/\S+/sg

También puedo imprimir los dos anteriores con -n y print join " ",expr sin necesidad de poner el separador de campos de salida.
alfplayer
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina

Re: Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor explorer » 2011-07-31 16:46 @740

El '$\="\n";' te sobra porque eso es lo que hace la opción '-l'

Otra versión (que tampoco he probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. s{<title>\s*(.*?)\s*</title>}{$1}is;
  3. s/\s+/ /g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor alfplayer » 2011-07-31 17:31 @771

Estoy usando Perl 5.14.1 en Arch Linux.

explorer escribiste:El '$\="\n";' te sobra porque eso es lo que hace la opción '-l'

Con -l, si lo quito termina con null en lugar de newline.

explorer escribiste:Otra versión (que tampoco he probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. s{<title>\s*(.*?)\s*</title>}{$1}is;
  3. s/\s+/ /g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Como es de esperar la primera línea reemplaza la coincidencia pero devuelve todo el archivo HTML. No es lo que quiero lograr.
alfplayer
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina

Re: Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor explorer » 2011-07-31 18:16 @803

alfplayer escribiste:Con -l, si lo quito termina con null en lugar de newline.
¡Ag! Cierto, es debido a la presencia de -0.

alfplayer escribiste:Como es de esperar la primera línea reemplaza la coincidencia pero devuelve todo el archivo HTML. No es lo que quiero lograr.
Ya dije que no lo había probado :wink: . A ver ahora.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. s{.*?<title>\s*(.*?)\s*</title>.*}{$1}si;
  3. s/\s+/ /g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Captura y dos sustituciones. ¿Es posible simplificarlo?

Notapor alfplayer » 2011-07-31 19:06 @837

Es sucinto y parece ejecutarse rápido.

Aprendí mucho con este tema.
alfplayer
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina


Volver a Intermedio

¿Quién está conectado?

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