Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Captura y dos sustituciones. ¿Es posible simplificarlo? Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota 2011-07-30 14:03 @627

Perlero Nuevo
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina
Mensajes: 6
Captura y dos sustituciones. ¿Es posible simplificarlo?
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?

Syntax: [ Download ] [ Hide ]
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" ;


Nota 2011-07-30 14:39 @652
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Captura y dos sustituciones. ¿Es posible simplificarlo?
Bienvenido a los foros de Perl en español, alfplayer.

Simplificarlo más... complicado...

Esta es mi versión (que no he probado):
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. ($_) = m{<title>(.*?)</title>}s;
  3. s/\s+/ /g;
  4. s/^\s|\s$//g;

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


Nota 2011-07-31 12:54 @579

Perlero Nuevo
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina
Mensajes: 6
Re: Captura y dos sustituciones. ¿Es posible simplificarlo?
Gracias, explorer.

Aprendí varias cosas.

Ahora estoy usando este código:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. $\="\n" ;
  3. ($_) = m?<title>\s*(.*\?)\s*</title>?is ;
  4. s/\s+/ /g ;


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.


Nota 2011-07-31 16:46 @740
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Captura y dos sustituciones. ¿Es posible simplificarlo?
El '$\="\n";' te sobra porque eso es lo que hace la opción '-l'

Otra versión (que tampoco he probado):
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. s{<title>\s*(.*?)\s*</title>}{$1}is;
  3. s/\s+/ /g;

_________________
JF^D Perl programming


Nota 2011-07-31 17:31 @771

Perlero Nuevo
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina
Mensajes: 6
Re: Captura y dos sustituciones. ¿Es posible simplificarlo?
Estoy usando Perl 5.14.1 en Arch Linux.

explorer escribió:
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 escribió:
Otra versión (que tampoco he probado):
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. s{<title>\s*(.*?)\s*</title>}{$1}is;
  3. s/\s+/ /g;

Como es de esperar la primera línea reemplaza la coincidencia pero devuelve todo el archivo HTML. No es lo que quiero lograr.


Nota 2011-07-31 18:16 @803
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Captura y dos sustituciones. ¿Es posible simplificarlo?
alfplayer escribió:
Con -l, si lo quito termina con null en lugar de newline.
¡Ag! Cierto, es debido a la presencia de -0.

alfplayer escribió:
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.
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -lp0
  2. s{.*?<title>\s*(.*?)\s*</title>.*}{$1}si;
  3. s/\s+/ /g;

_________________
JF^D Perl programming


Nota 2011-07-31 19:06 @837

Perlero Nuevo
Registrado: 2011-07-30 13:31 @605
Ubicación: Buenos Aires, Argentina
Mensajes: 6
Re: Captura y dos sustituciones. ¿Es posible simplificarlo?
Es sucinto y parece ejecutarse rápido.

Aprendí mucho con este tema.


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO