• Publicidad

Duda con conexión con IRC

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

Re: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 11:55 @538

Pasó lo que dije: se estanca en el primer while(), por eso dije que no sabía cómo hacerlo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while(1) {
  2. sleep 10;
  3. print $soquete "PRIVMSG $canal : hola mundo de ***\r\n";
  4. }
  5.  
  6. while (<$sockete>) # while que comprueba la conexión
  7. {
  8. # Aquí compruebo que el socket esté conectado; si no, cierro el hilo que...
  9. # ...envía los mensajes y reconecto al canal irc
  10. }
  11.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por BigBear el 2014-01-07 11:57 @539, editado 1 vez en total
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Duda con conexión con IRC

Notapor explorer » 2014-01-07 11:55 @538

La línea 7 de Aceitunas, está mal... No es '==', sino 'eq'.
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: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-07 12:22 @557

Sería algo así, Doody:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use threads;
  2.  
  3. # identificarse en el canal y etc...
  4.  
  5. my $idhilo = threads->new(\&HolaMundo); # creamos el hilo que enviará mensajes
  6.  
  7. $idhilo->join(); # lanzamos el hilo
  8.  
  9. while (<$sockete>) # while que comprueba la conexión
  10. {
  11.     # aquí hacemos lo que tengamos que hacer, si falla la conexión sale del while y se cierra el hilo.
  12. }
  13.  
  14. $idhilo->exit(0);   # si llegamos aqui es porque el while falla, cerramos el hilo.
  15.  
  16. exit(0);
  17.  
  18. sub HolaMundo
  19. {
  20.     while(1) {
  21.                 sleep 10;
  22.                 print $soquete "PRIVMSG $canal : hola mundo de ***\r\n";
  23.         }
  24. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


@explorer con '==' tambien funciona correctamente :roll:
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: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 12:41 @570

No sé si es porque solo tengo un núcleo en el procesador pero el código hace que deje de funcionar la detección de comandos como !help. Intenté poner también en otro thread a la otra parte que vendría a ser la detección de comandos pero sigue el mismo problema: no detecta nada y lo único que anda bien es el while() que saludo diciendo "hola mundo".
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-07 12:46 @573

No tiene nada que ver que tengas un núcleo... Tienes que estar haciendo algo mal, si puedes poner el código igual podemos solucionártelo también.
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: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 12:51 @577

BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor explorer » 2014-01-07 15:29 @687

Aceitunas escribiste:@explorer con '==' también funciona correctamente :roll:
Parece que funciona pero, no es así.

$4 contiene el comando, así que suponemos que es una cadena de caracteres.

El operador de comparación '==' es NUMÉRICO, por lo que va a hacer una conversión NUMÉRICA de los operandos, así que escribir esto:

if ($4 == "!crackit") {

quiere decir que $4 es convertido a número, y "!crackit" también es convertido a número.

Si $4 contiene alguna cadena de caracteres que no empieza por números, esa conversión da 0. Y de "!crackit", lo mismo.

Así que, entonces tenemos la operación '0 == 0', que siempre es verdadera. Por eso ves que funciona, pero no como pensabas.

Prueba: cambia en $var, la parte "!crackit", por cualquier otra (por ejemplo, "!craqueo"), y verás que también funciona el if(), cosa que no debería.

Por eso, la comparación de cadenas debe realizarse siempre con operadores alfanuméricos. Debes usar 'eq'.
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: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 17:31 @771

Dejo el proyecto acá. Le agradezco a los dos por la ayuda. Debería poner a los dos en los créditos. Mañana agrego eso.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-07 19:38 @860

@explorer tienes razón :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.

Re: Duda con conexión con IRC

Notapor BigBear » 2014-01-08 10:05 @462

Sí, es lo que pasa cuando intentas corregir a explorer.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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