in reply to Re^6: Real time log parser
in thread Real time log parser
Your main problem is that you need to split the line you're passing to ban()
m|/sorry/| && ban(split ' ', $_);
With that input, your above three lines would start to make some sense.
Thing is that, in contrast to command line arguments, a string you pass as one parameter to a subroutine is not automatically split. I.e., when you say on the command line
# ./script.pl foo bar baz
you get the three words "foo", "bar", "baz" as separate elements in the array @ARGV (which I suppose you were using in the working command line version in place of @_). This is because the shell splits the command line on whitespace, before the arguments are placed in @ARGV.
OTOH, when you pass "foo bar baz" as a single string to a subroutine, it is left as is, so the array @_ holds one element, which is the entire string. In other words, after your grep for /proxy_/, you still have the entire string in @cutoff — and the rest of the code stops working...
That said, you could also leave your ban($_) call as is, and simply extract the relevant part of the string with a regex capture:
sub ban { my $line = shift; ... my ($proxy) = $line =~ m| - \S+/(proxy_\S+)|; my @cutoff = grep /$proxy/, @cfg; ...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^8: Real time log parser
by kazak (Beadle) on Jan 03, 2012 at 10:33 UTC | |
by Eliya (Vicar) on Jan 03, 2012 at 10:51 UTC |