in reply to First Perl CGI app; desirous of peer review.

A slightly better, and somewhat more readable, extensable way, to write your main sub is to use a hash instead of a nested switch. That is, you could write it as:
my %functions = ( default => \&write_default, warning => \&write_warning, confirm => \&write_confirm, commit => \&write_commit );
However, you would need to modify each sub to take the same arguments, which isn't that hard (see below). In addition, while your script does not do anything if the action type is unknown beyond print out header and footer (even though you have checked for it at check_param), you should still cover it here, so that your function calling routine can look like:
# This is outside of main, in the 'global' block my %function = ( # see above ); # The rest is inside of main $action = ( $function{ $action } ) ? $action : 'default'; # you could also have an 'invalid' block here for an invalid # parameter &$function{ $action } ( $script_loc, $email, $name, $warning_msg );

Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain

Replies are listed 'Best First'.
Re: Re: First Perl CGI app; desirous of peer review.
by legLess (Hermit) on Jun 24, 2001 at 21:56 UTC
    Thanks Michael; that's pretty code. You're right that it's a bit of a pain to add new arguments. As soon as I understand your hash example, I'll implement.

    And actually, check_param sets '$action' to 'default' if '$action' isn't recognized, so the script does print the default page, as it should.
    --
    man with no legs, inc.