I didn't think that map{} could modify an input, but evidently that is true when the $_ var is modified.
It's clearly documented: "Note that $_ is an alias to the list value, so it can be used to modify the elements of the LIST." Just like foreach loops.
Many people use map { s/// }, but that clobbers the input in the process. List::MoreUtils's apply and Algorithm::Loops's Filter solve this problem, and so does
s/// for my @out = @in;
but one thing is that ("a","b","c","d") is different than ('a'..'d').
Indeed. A constant range in list context is flattened into an array.
$ perl -MO=Concise,-exec -e'print 1..3' 1 <0> enter 2 <;> nextstate(main 1 -e:1) v 3 <0> pushmark s 4 <$> const[AV ] s <----- 5 <1> rv2av lKP/1 6 <@> print vK 7 <@> leave[1 ref] vKP/REFC -e syntax OK
As previously mentioned, the problem is that the members of the array aren't read-only.
In reply to Re^3: list assignment and undef (range returns non-temps)
by ikegami
in thread list assignment and undef
by ig
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |