in reply to Re: Accessing Arguments inside Subroutines via @_
in thread Accessing Arguments inside Subroutines via @_
I think what is really troubling you is the ambiguity between setting a symbol's slot and assigning to a symbol in Perl. (not sure if this is proper terminology)
Pure Perl has neither an explicit alias operator, nor an explicit unalias operator.²
So if a scalar variable $a is an alias to $b you can't easily say $a=42 without changing $b , i.e. replacing the alias in the $a -"slot" with a literal 42.¹
But when operating with arrays like @_ you have the choice.
$_[0]=42 is accessing the alias behind, but @_=(42) will replace the content of the slot.
DB<106> sub repl { @_=(42); print "> $_[0]"; } DB<107> $a=666 => 666 DB<108> repl $a > 42 DB<109> $a => 666
It has already been shown how to access multiple aliases at once (slicing), similarly you can use splice to access multiple slots of an array at once.
I hope the distinction between setting a slot and assigning to an alias is clearer now. :)
¹) But you can always use my $a=42 in a new scope or local $a=42 if it's a package var.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: Accessing Arguments inside Subroutines via @_
by Athanasius (Archbishop) on Mar 22, 2015 at 09:04 UTC | |
by LanX (Saint) on Mar 22, 2015 at 12:06 UTC | |
Re^3: Accessing Arguments inside Subroutines via @_
by AppleFritter (Vicar) on Mar 21, 2015 at 16:59 UTC | |
by LanX (Saint) on Mar 21, 2015 at 17:10 UTC |