The (explicitly stated or implicite $_) loop variable in foreach loops is always an alias (what Perl calls C-like references) to the element, as opposed to a copy. This has nothing to do with a reference ($a) being involved. If you want to modify the loop variable without modifying the array element, use one of the following workarounds:
foreach (@array) { my $i = $_; # $i is a copy. ... }
or
foreach (@array) { local $_ = $_; # $_ is a copy. ... }
In reply to Re: Using Array Refs
by ikegami
in thread Using Array Refs
by jroberts
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |