http://www.perlmonks.org?node_id=332920


in reply to Perl Idioms Explained - my ($foo, $bar) = @{shift(@_)}{qw/ -foo -bar /}

That's nice for a short parameter list, but it could get bluky for large lists (like the HTML::Template constructor). I prefer something like this:

{ my @PARAMS = qw( foo bar baz ); sub new { my $class = shift; my $in = shift; my $self = { map { $_ => $in->{$_} || '' } @PARAMS }; bless $self, $class; } }

The above is more self-documenting, because all the parameters taken are listed above the subroutine and can be easily broken into multiple lines. It also doesn't mix the parameter definitions with other code.

----
: () { :|:& };:

Note: All code is untested, unless otherwise stated