* Ovid <[EMAIL PROTECTED]> [2005-08-12 23:40]:
> Yes, but you're altering the hash passed in by reference.

Fair point, and trying to avoid that does get ugly. I don’t run
into it much because I usually take named params directly in @_
instead of via a hashref.

    sub foo {
        my ( $args ) = @_;
        my %default = ( foo => 1, bar => 1, baz => 'quux' );
        my @optional_keys = qw( wibble wobble );

        my %have_keys = map { $_ => undef } keys %$args;
        delete @have_keys{ keys %default, @optional_keys };
        croak "I have no idea what you mean by @{[ keys %have_keys ]}" if 
%have_keys;

        my %args = (
            %default,
            %$args,
            map { exists $args->{ $_ } ? ( $_ => $args{ $_ } ) : () } 
@optional_keys,
        };
        
        # ...
    }

But the point still stands that I’d be likelier to keep a copy of
a function for this purpose in my snippets file than to depend on
a module that doesn’t provide anything but it.

Also the point about lock_keys, which makes all of this a
non-issue.

Regards,
-- 
#Aristotle
*AUTOLOAD=*_=sub{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1};
&Just->another->Perl->hacker;

Reply via email to