Looks like a pretty good start for a first big script. I did find some bugs in testing.
First thing that pops out is your options don't work - you are passing "numeric" into your validation function but checking against "number".
Also, something about how you save and load params is causing it to fail searches. I didn't investigate further that to check that the log file looks OK.
The search logic is a little wonky. Finds results and writes empty logfiles, doesn't find results when it should, etc. You're reinventing the wheel by writing a lot of error-prone logic. You could use regex over slurped files that File::Find's DFS digs up.
$/ = undef; open FILE, '<', $_; my $file = <FILE>; $/ = "\n"; close FILE; my @matches = $file =~ /((?:.*\n?){$lines_up}) (.*$pattern.*\n?) ((?:.*\n?){$lines_down})/x; my @parts = qw(lines_up matched_line lines_down); for (@matches) { if (! (my $index = $run++ % 3)) { print "match #" . (int($run / 3) + 1) . " in file\n"; } print $parts[$index] . ":\n$_\n"; }
Of course, it would probably be better practice not to load the entire file into memory...
An educational next step would be to run your search in another thread so that the GUI doesn't lock up while it's running the search.
All said, you've laid a nice foundation. Looks great!
Strange things are afoot at the Circle-K.
In reply to Re: Noob could use advice on simplification & optimization
by temporal
in thread Noob could use advice on simplification & optimization
by bgreg
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |