• Publicidad

Crear log para irc[SOLUCIONADO]

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

Crear log para irc[SOLUCIONADO]

Notapor LeoSevilla » 2019-12-26 13:56 @622

Hola, Felices Fiestas :)

Estoy queriendo crear un log desde un bot en Perl, y quiero darle el siguiente formato:

1013630386748 :nick!ident@hostname PRIVMSG #channel :Hello world.

El valor ":nick!ident@hostname PRIVMSG #channel :Hello world." me viene dado por el servidor, y la fecha (1013630386748) la puedo tomar con `date +%s%N` del sistema operativo.

Lo que no sé es cómo grabarlo a partir de este código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. $sock = ":nick!ident\@ip.virtual.com PRIVMSG #canal :Una prueba más";
  3. `date +%s%N | cut -b1-13 >> logirc.txt`;
  4.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Eso me graba la fecha, pero a continuación necesito se añada el contenido de la variable $sock. He probado con xargs, con tee, pero no doy son la solución. ¿Alguna idea?

Salu2.
Última edición por LeoSevilla el 2019-12-26 16:58 @749, editado 1 vez en total
LeoSevilla
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2011-11-19 15:24 @683

Publicidad

Re: Crear log para irc

Notapor explorer » 2019-12-26 16:33 @731

Lo ideal es que todas estas operaciones se hiciesen directamente desde Perl, sin depender de comandos externos, como date y cut.

Almacenando el tiempo en una variable intermedia, le quitamos los caracteres de fin de línea, y luego lo concatenamos con lo que queremos sacar al log.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $sock = ":nick!ident\@ip.virtual.com PRIVMSG #canal :Una prueba más";
  2. $tiempo = `date +"%s-%N" | cut -b1-13`;
  3. chomp $tiempo;
  4. #say "$tiempo$sock"'
  5. `echo "$tiempo$sock" >> logirc.txt`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero esto... es tan poco Perl... casi mejor hacerlo en Bash shell :-)
Usando Perl evita que se ejecuten procesos externos, por lo que es más rápido.

Lo lógico es hacerlo con open, print, time() para recuperar la fecha, manipulación, impresión...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use autodie;
  3. use Time::HiRes qw(gettimeofday);
  4.  
  5. open my $LOG, '>>', 'logirc.txt';
  6.  
  7. # entramos en el bucle principal...
  8.  
  9. $sock = ":nick!ident\@ip.virtual.com PRIVMSG #canal :Una prueba más";
  10.  
  11. $tiempo = join "", gettimeofday;  # obtenemos los segundos y microsegundos
  12. $tiempo = substr $tiempo, 0, 14;
  13.  
  14. print $LOG "$tiempo$sock\n";
  15.  
  16. # repetimos bucle
  17. # ...
  18. #
  19.  
  20. # Fin del bucle
  21. close $LOG;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
15773957617909:[email protected] PRIVMSG #canal :Una prueba más
Coloreado en 0.000 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: Crear log para irc

Notapor LeoSevilla » 2019-12-26 16:54 @746

Hola. Pues sí, yo pensando en hacerlo fácil y lo fácil es Perl (cuando se sabe).

Gracias por la respuesta, lo haré en Perl y me dejaré de comandos en Bash.

Salu2
LeoSevilla
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2011-11-19 15:24 @683


Volver a Básico

¿Quién está conectado?

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