waxmop has asked for the wisdom of the Perl Monks concerning the following question:

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.