DB<122> $a
=> 5
DB<123> sub alias_add { $_[0]+=2 }
DB<124> alias_add $a
=> 7
DB<125> $a
=> 7
####
DB<126> sub ref_add { ${ shift() }+=2 }
DB<127> ref_add \$a
=> 9
DB<128> $a
=> 9
DB<129> sub ref_add2 { ${ +shift }+=2 }
DB<130> ref_add \$a
=> 11
DB<131> $a
=> 11
####
DB<102> $a=11
=> 11
DB<103> sub ref_add3 { ${ (shift) }+=2 }
DB<104> ref_add3 \$a; $a
=> 13
####
Any arguments passed in show up in the array @_. Therefore, if you
called a function with two arguments, those would be stored in $_[0]
and $_[1]. The array @_ is a local array, but its elements are aliases
for the actual scalar parameters. In particular, if an element $_[0]
is updated, the corresponding argument is updated (or an error occurs
if it is not updatable).