• Publicidad

Fin de cadena

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

Fin de cadena

Notapor Aceitunas » 2013-12-08 11:05 @503

¿Qué carácter toma Perl como fin de cadena? Sé que en otros lenguajes como C es '\0' pero en Perl no lo he encontrado...

Un saludo.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Publicidad

Re: Fin de cadena

Notapor explorer » 2013-12-08 11:21 @514

Ninguno.

¿Puedes dar más detalles de lo que quieres hacer?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Fin de cadena

Notapor Aceitunas » 2013-12-08 11:46 @532

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub UltimosPost
  2. {
  3.         my @post = split("rel=\"nofollow\">",$_[0]);
  4.        
  5.         my $i = 1;
  6.        
  7.         while (@post[$i])
  8.         {
  9.             #@post[$i] =~ s/<\/a>/\0/;
  10.                 my @tema = split("</a>",@post[$i]);
  11.        
  12.                 print @tema[0] . "\n";
  13.                 $i++;
  14.         }
  15. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Quitar el split que hay dentro del bucle para que la función sea más rápida.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Fin de cadena

Notapor explorer » 2013-12-08 12:51 @577

Tienes un par de fallos sintácticos. No se escribe @post[$i], sino $post[$i]. Cuando se accede a un escalar siempre hay que usar el sigilo '$'.

En cuanto al problema, se puede resolver de varias formas.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use feature 'say';
  2.  
  3. sub UltimosPost {
  4.     my @post = split /rel="nofollow">/, $_[0];
  5.  
  6.     for (@post) {
  7.         my @tema = split /<\/a>/;
  8.         say $tema[0];
  9.     }
  10. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Quizás con una expresión regular sea más rápido:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use feature 'say';
  2.  
  3. sub UltimosPost {
  4.     while ($_[0] =~ /"nofollow">(.+?)</g) {
  5.         say $1;
  6.     }
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Incluso, si sabemos que $_[0] solo contiene un enlace <a>, se puede reducir aún más:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use feature 'say';
  2.  
  3. sub UltimosPost {
  4.     $_[0] =~ /"nofollow">(.+?)</;
  5.     say $1;
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Depende un poco del formato que tenga $_[0].
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Fin de cadena

Notapor Aceitunas » 2013-12-08 14:48 @658

Impresionante el poder que tiene Perl para manejar cadenas...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $_[0] =~ /"nofollow">(.+?)</g)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Me puedes explicar "(.+?)"?

¡Gracias!
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Fin de cadena

Notapor pablgonz » 2013-12-08 17:56 @789

Creo (no soy el experto) que ¿"(.+?)"? significa «Cualquier carácter, incluido espacios pero no saltos de línea, que esté luego de nofollow> y antes de <», es decir, todos lo que estén entre nofollow> y <.

Saludos
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Fin de cadena

Notapor explorer » 2013-12-08 19:51 @869

(.+?) quiere decir

«uno o más (+) caracteres cualesquiera (.) que están inmediatamente antes de (el carácter que sigue a la expresión, que era '<'). Y esos caracteres me los capturas en $1 (efecto del par de paréntesis de captura que rodean al patrón)»

Más información en tu propio ordenador en perldoc perlre, y en la Web (traducido al español). En Wikipedia tienes también una buen resumen de lo que son las expresiones regulares.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Fin de cadena

Notapor Aceitunas » 2013-12-09 03:35 @191

Gracias a los dos. :D
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.


Volver a Básico

¿Quién está conectado?

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