• Publicidad

Expresiones regulares y el tail

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

Expresiones regulares y el tail

Notapor joralastair » 2012-12-27 15:07 @672

Hola a todos, muchas felicidades.

Desde hace días tengo un problema con un script que tiene como función hacer un tail -f y filtrar una cadena específica, y ya lo he intentado de varias manera, y siempre me da el error
"Use of uninitialized value $_ in scalar chomp at script.pl line 17.
Use of uninitialized value $_ in pattern match (m//) at script.pl line 18.
"

En este caso lo hago con el archivo /var/log/syslog

Este es el script

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.006;
  3. use strict;
  4. use warnings;
  5. use File::Tail;
  6.  
  7. # variables globales
  8. my $name = "/var/log/syslog";
  9. my $line;
  10. my $file = File::Tail->new(name=>$name, maxinterval=>1, adjustafter=>7);
  11.  
  12. my $prueba = "";
  13.  
  14. #
  15.   while (defined($line=$file->read))
  16.     {
  17.      chomp;
  18.      if (m/(\D{2,3})/)
  19.         {
  20.      $prueba = $1;
  21.      
  22.   }
  23.  }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Cualquier ayuda se agradece infinitamente. Saludos. Jorge.
joralastair
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-12-18 17:48 @783

Publicidad

Re: Expresiones regulares y el tail

Notapor explorer » 2012-12-27 19:21 @848

El problema está en que en el while() estás pasando las líneas que lee File::Tail a la variable escalar $line, mientras que el chomp() y la posterior expresión regular se están aplicando a la variable por defecto $_. Y como no la has inicializado (estás usando $line), te marca el error de que $_ no contiene nada.

Solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ( defined( $line = $file->read ) ) {
  2.     chomp $line;
  3.  
  4.     if ($line =~ m/(\D{2,3})/) {
  5.         $prueba = $1;
  6.         ...;                        # hacer aquí algo con $prueba
  7.     }
  8. }
Coloreado en 0.002 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


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 22 invitados