X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fgrepdbg;h=80a918a07cc7a0a6a998d15240dd26746711bd75;hb=2733a992ac8c3d315c110a2cc1984ea0a5e5d0ff;hp=f133a143448972d0e75e5f019fb9015665ef77ff;hpb=bb4e9b13809a5d4c4971c3286309d12fe0f82047;p=spider.git diff --git a/perl/grepdbg b/perl/grepdbg index f133a143..80a918a0 100755 --- a/perl/grepdbg +++ b/perl/grepdbg @@ -5,7 +5,6 @@ # # grepdbg [nn] [-mm] # - # nn - is the day you what to look at: 1 is yesterday, 0 is today # and is optional if there is only one argument # @@ -15,6 +14,11 @@ # is the regular expression you are searching for, # a caseless search is done # +# If you specify something that likes a filename and that filename +# has a .pm on the end of it and it exists then rather than doing +# the regex match it executes the "main::handle()" function passing +# it one line at a time. +# # require 5.004; @@ -54,6 +58,15 @@ for my $arg (@ARGV) { push @list, $arg; } elsif ($arg =~ /^\d+$/) { $nolines = $arg; + } elsif ($arg =~ /\.pm$/) { + if (-e $arg) { + my $fn = $arg; + $fn =~ s/\.pm$//; + eval { require $arg}; + die "requiring $fn failed $@" if $@; + } else { + die "$arg not found"; + } } else { $string = $arg; last; @@ -67,12 +80,22 @@ for my $entry (@list) { my $now = $today->sub($entry); my $fh = $fp->open($now); my $line; + my $do; + + if (main->can('handle')) { + $do = \&handle; + } else { + $do = \&process; + } + + begin() if main->can('begin'); if ($fh) { while (<$fh>) { - process($_); + &$do($_); } $fp->close(); } + end() if main->can('end'); } sub process @@ -85,7 +108,8 @@ sub process for (@prev) { s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; my ($t, $l) = split /\^/, $_, 2; - print atime($t), ' ', $l, "\n"; + print atime($t), ' ', $l, "\n"; + print '----------------' if $nolines > 1; } @prev = (); } @@ -93,6 +117,6 @@ sub process sub usage { - die "usage: grepdbg [nn] [[-nnn] ..] \n"; + die "usage: grepdbg [nn days before] [-nnn lines before] [|]\n"; } exit(0);