in reply to Re: Modification of a read-only value attempted?!?
in thread Modification of a read-only value attempted?!?
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Modification of a read-only value attempted?!?
by haj (Vicar) on Jan 07, 2024 at 21:27 UTC | |
by LanX (Saint) on Jan 07, 2024 at 22:10 UTC |