in reply to passing subroutine arguments directly into a hash

Well, there's always the obvious:
my %args = ( h => $_[0], s => $_[1], d => $_[2] );