in reply to Omitted subroutine arguments

I do just about the same as the replies above, almost all of my subroutines look like
sub my_sub { my %args = ( param1 => 'default', param2 => 0, @_, ); ... }
Then I call it like
my_sub( param1 => 'Not Default Text' );
then the defaults get overridden with what I send, or use the defaults if I don't. If it is an object method, then I just add a line before the args:
sub my_sub { my $self = shift; my %args = ( @_, ); .... }