[Boston.pm] something about @_ is different?

"Greg London" <email-2Ro/Dj86MvDSUeElwK9/[email protected]> Tue, 21 May 2019 14:04:11 -0400
Newsgroups gmane.comp.lang.perl.perl-mongers.boston
Message-ID <[email protected]>
Hm, it could be a caffeine defficiency, but it seems that @_ is
being treated different than other arrays.

I can create a normal array:
my @normal_array=('a','b');

and I can assign an entirely new list to it:
@normal_array=reverse(@normal_array);     # assign to array

and I can assign to it in parenthesis an entirely new list
(@normal_array)=reverse(@normal_array);   # assign to (array)


And those assignements take hold as I would expect.

When I use the exact same syntax for the @_ array instead
of @normal_array, it doesn't work as expected:
sub swapper{
	(@_) = reverse(@_);  # this doesn't seem to do anything.
}

my @other=('x','y');
swapper(@other);
print Dumper \@other;

Pretty sure this code used to work,
but that was many moons ago.

Thoughts?

Greg

Here's the script in one big copy/paste block:


my @normal_array=('a','b');
print "normal_array is "; print Dumper \@normal_array;
@normal_array=reverse(@normal_array);     # assign to array
print "normal_array is "; print Dumper \@normal_array;
(@normal_array)=reverse(@normal_array);   # assign to (array)
print "normal_array is "; print Dumper \@normal_array;


sub swapper{
	(@_) = reverse(@_);
}

my $one = "i am one";
my $two = "i am two";

swapper($one,$two);

warn "one is '$one'";
warn "two is '$two'";