This subroutine allows the user to override some default values by
using named params:
sub draw_form
{
my %args = (
'buttons' => [],
'action' => 'parse.cgi',
@_
);
while ( my($k, $v) = each(%args) ) {
if ( ref($v) eq 'ARRAY' ) {
$v = "@$v";
}
print "$k: $v.\n";
}
print "---\n";
}
That works well enough. But I'm worried about potentially harmful stuff happening like this:
#I don't want people adding stuff like this!
draw_form(logged_in_already => 'true');
So, I can improve the draw_form subroutine like so:
sub safer_draw_form
{
my %args = (@_);
my @buttons = ();
if ( $args{'buttons'} ) {
push @buttons, @{$args{'buttons'}};
}
my $action = 'parse.cgi';
$action = $args{'action'} if $args{'action'};
print "action: $action.\n";
print "buttons: @buttons.\n";
print "---\n";
}
However, as the list of params increases, all that handling at the beginning is going to get clunkier and clunkier. I hope the community can help me smooth this code out.