The pragma would have to be very magical, since it's a waste to return a potentially LONG list, like an array or hash, and functions like each() and keys() and values() and push() and pop() (etc) require ACTUAL hashes or arrays in their first argument, not things RETURNING them.
As for %{$ref->[0]->{param}->
1->{name}} being ugly, ADD WHITESPACE, and REMOVE ARROWS:
%{ $ref->[0]{param}[1]{name} }