in reply to Help with uninitialized value warning

You should always test with data that should work. For example:
% perl example.cgi 'Submit=Go'
The other case is to be paranoid:
my $submit = $cgi->param('Submit'); if (defined($submit) && $submit eq 'Go') { do_results($cgi); }
This is probably a better idea, since someone can easily load your page sans-parameters, and if this warning were actually an error, they would get the old "500 Internal Server Error" page and then complain that your "program doesn't work" even though they are unintentionally feeding it bad data.

I'd like to take this moment to encourage you to not use ampersands on function calls. The generally accepted way of making a call is bare.

Update: Changed submit=1 to the appropriate Submit=Go per dws's suggestion. Nothing like having test values that are actually accurate.