in reply to multiple passes by reference

if i have one subroutine that calls another subroutine, should i pass a value to sub one by reference, and then to sub two by reference again, or should i pass a value to sub one by reference and then to sub two straight?

Once you have a reference, it stays a reference until you dereference it. This is a bit clearer if you use a more accurate name for the function arguments.

Here's trimmed down version of your example, with names changed:

one(\%hash); sub one { my($hashref) = @_; two($hashref); } sub two { my($hashref) = @_; # it's still a hashref foreach ( keys %$hashref ) { print "$_\n"; } }