in reply to Default values in functions arguments
Also, instead of saying keys, you could use an array of legal key values (using uc or lc to handle case issues) and then overwrite $arg{$legalkey} if it exists in the passed in hash.sub Whatever { # Optional test of the arguments. Good for catching programmer err +ors. # Not that anyone here ever makes any. 8-) die 'Takes a hash ref' if @_ and grep { "HASH" ne ref } @_; # Set up the defaults here: my %args = ( KEY1 => 'default value', KEY2 => 'etc...' ); # And process the args. my $index = @_; # Intentionally reverse the order. # The first hash thus has precedence. while( --$index >= $[ ) { $args{$_} = $_[$index]->{$_} for keys %{$_[$index]} } # Do stuff with %args. }
Note that I keep saying "passed in hash", what I should say is "hash that the passed in hashref references", but I'm lazy. Then again I added this comment... sigh
|
---|