Under normal usage, they take
values not variables. If you run the code
sub add_one {
my $x = shift;
$x += 1;
return $x;
}
You would not expect the variable you passed in (
my $y = add_one($outer_x);) to change value, right? This is a little awkward/contrived, but this is in contrast to more object-oriented frameworks.
Advanced: Of course Perl actually does pass by reference with lvalues bound to @_. But that's probably the best reason for transferring subroutine inputs to locally-scoped variables.
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.