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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.