Valid point, but Carp::cluck tells you of the invocation point, also. If you would want that globally, you could $SIG{__WARN__} = \&Carp::cluck and comment that out in the final version.
Too expensive for me if there's no other reason to pass named parameters as an anonymous hash:
use Benchmark qw(cmpthese);
sub f{}
cmpthese (
-1 => {
list => sub { f( foo => 1) },
ref => sub { f({foo => 1})},
}
);
__END__
Rate ref list
ref 232162/s -- -88%
list 1989486/s 757% --
Contructing and destructing a full blown hash only to pass named parameters is just a waste. Breaking named parameters into several lines aligning the fat commata vertically helps. I did commit the gaffe of passing an odd number of arguments as named subroutine parameters maybe twice in all my time as a perl programmer, but more often I've been bitten by missing the curlies for apis which required a hash ref for named parameters.