Yes, yes, the loop variable in for(each) aliases elements of the list.
But why is the loop variable read-only if there is only a single numeric (or string) literal in the list?
AFAICT the program works as expected in all other cases.perl -MDevel::Peek -le 'for my $x ([1]->[0]) {Dump $x; $x = pack "I", +$x; Dump $x}' # OK perl -MDevel::Peek -le 'my $y=1; for my $x ($y) {Dump $x; $x = pack "I +", $x; Dump $x}' # OK perl -MDevel::Peek -le 'sub one(){1} for my $x (one) {Dump $x; $x = pa +ck "I", $x; Dump $x}' # OK perl -MDevel::Peek -le 'for my $x (0+1) {Dump $x; $x = pack "I", $x; D +ump $x}' # OK!!! perl -MDevel::Peek -le 'for my $x ("1"."1") {Dump $x; $x = pack "I", $ +x; Dump $x}' # OK perl -MDevel::Peek -le 'for my $x ("1") {Dump $x; $x = pack "I", $x; D +ump $x}' # Error, read-only perl -MDevel::Peek -le 'for my $x (1) {Dump $x; $x = pack "I", $x; Dum +p $x}' # Error, read-only
Experimenting on perlbanjo.com, it seems that this behavior goes back to at least Perl 5.8.
In reply to Re^2: Modification of a read-only value attempted?!?
by kikuchiyo
in thread Modification of a read-only value attempted?!?
by kikuchiyo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |