my %d = ("foo", "bar"); sub fs { $_[0] = "quux"; } fs(values %d); print join(" ", %d), $/; # OUTPUT: foo quux #### my %d = ("foo", "bar"); sub fi { ${$_[0]}[0] = "quux"; } fi([values %d]); print join(" ", %d), $/; # OUTPUT: foo bar #### my %d = ("foo", "bar"); sub fi { ${$_[0]}[0] = "quux"; } sub capture { \@_ } fi(capture(values %d)); print join(" ", %d), $/; # OUTPUT: foo quux