In foreach, the loop variable (default $_) is an alias to the original value. That means that changing the value will change the original.
my $x = 100;
my @y = (10, 20, 30);
foreach ($x, @y) {
$_ *= 2;
}
local $" = ", ";
print "\$x = $x\n\@y = (@y)\n";
# or:
foreach my $n ($x, @y) {
$n *= 2;
}
Ditto in the block or expression for map and grep ($_ only).
map { $_ *= 2 } $x, @y;
grep { $_ *= 2 } $x, @y;
BTW parameters to subs are aliases too, so if you change them in @_, you'll modify the originals too:
sub double {
foreach(@_) {
$_ *= 2;
}
}
double($x, @y);
|