in reply to Using @_ as an lvalue

You should NOT name a function y (or tr, or m, or q, ...). What's happening is your function y() is never getting called. Your code is the same as:
use strict; sub x { ($_[0],$_[1],$_[2])=qw(fee fi fo) } sub y { @_ = qw(one two three) } sub z { ($_[1],$_[2],$_[3]) = @{$_[0]} } my ($x,$y,$z); x($x,$y,$z); print "$x, $y, $z", $/; tr!$x,$y,$z! print "$x, $y, $z", $/! &z( [ 77,44,232], $x, $y, $z); print "$x, $y, $z", $/;
That is why you have to preface z() with an &, because the code looks like:
tr/abc/def/ &function(); # which is really tr/abc/def/ & function();
But even so, @_ is not binded specially. The elements in it are, but not the array as a whole. Assigning to the array as a whole breaks any bond.

japhy -- Perl and Regex Hacker

Replies are listed 'Best First'.
A reply falls below the community's threshold of quality. You may see it by logging in.