in reply to Re: Real time log parser
in thread Real time log parser

I understand that, but: "How to pass found string as an argument for a subroutine or external script?", this is the thing which I'm not fully understand, because hold-subroutine works if I'm passing found string as an argument from a command line, but not works with script I attached above, perhaps I messed up somewhere.

Replies are listed 'Best First'.
Re^3: Real time log parser
by Eliya (Vicar) on Jan 02, 2012 at 18:56 UTC

    There's no difference to the usual way passing arguments to subroutines or scripts works.  In the above code, $_ (the current line read fron the file handle) is being passed to a subroutine hold() in case the regex matches. What the routine then does with it, depends on its implementation... So what does it look like?  Could it be you're confusing subroutine arguments (@_) and command line arguments (@ARGV)?

      Here's what I'm trying to do in general. As I said before, I'm new to perl so my code be so-so, but it worked from the command line, and now I'm trying to make it work with File::Tail:
      #!/usr/bin/perl # Squid reconfiguration script rev: 0.87 # use File::Tail; my (@tmpl,@cut); sub ban { open( CFG, "<", "/etc/squid/squid.conf" ); while ( <CFG> ) { push @cfg, $_; } close(CFG); my @cutoff = grep /proxy_/,@_; s/ROUNDROBIN_PARENT\///g for @cutoff; @cutoff = grep /@cutoff/,@cfg; open( GREY, ">", "/etc/squid/all.grey" ); if (@cutoff) { print GREY @cutoff; print GREY "10\n"; } close (GREY); print "Banned parrent: @cutoff\n"; print " Strings with parrent in conf: @cutoff\n"; open( EXC, ">", "/etc/squid/squid.conf" ); my %dels = map { $_ => 1 } @cutoff; @cfg = grep !$dels{$_}, @cfg; print EXC @cfg; close (EXC); @args = ("/etc/init.d/squid", "reload"); system(@args) == 0 or die "system @args failed: $?" ; } my $name = "/var/log/squid/access.log"; my $ref=tie *FH,"File::Tail",(name=>$name); while (<FH>) { my $res = ban ($_); m/\/sorry\// && ban ($_); }
        my @cutoff = grep /proxy_/,@_; s/ROUNDROBIN_PARENT\///g for @cutoff; @cutoff = grep /@cutoff/,@cfg;

        I'm not sure what this is supposed to be doing, but it somehow looks suspicious ;)   In @_ you have one line — as read from FH and passed to ban() ... What do those lines look like, and what do you expect to be in @cutoff after those three lines have executed?

        You said it worked from the command line.  How did you call it for this?

        P.S.: please indent your code properly.  You'll not only do us a favor, but yourself, too, in the long run...