in reply to passing arguments as reference

By default, Perl passes arguments by reference (or, technically, by alias). If you modify the elements of the @_, you will modify the variables that were passed in:
use strict; use warnings; sub modify_args { $_[0] = 'new-value'; } my ($one, $two) = qw(cat dog); modify_args($one, $two); print "$one $two\n";
Of course, you can also pass references instead of the variables themselves, and then unload @_ in the usual way so that you don't have to work with that undescriptively-named array. Or you can take references to the elements of the array:
sub modify_args1 { my ($argref1, $argref2) = \(@_[0..$#_]); $$argref1 = 'new value'; }

Caution: Contents may have been coded under pressure.