$a[$_] -= $b[$_] for 0..$#a;
is optimised into a counting loop (O(1) memory).
$a[$_] -= $b[$_] for (),0..$#a;
is not optimised (O(N) memory).
but 0..$#a is a list anyway
".." is usually the range operator, but not in the first example. In fact, it's not an operator at all there. It's just a separator like the semicolons in for(;;).
$ perl -MO=Concise,-exec -e'1 for (),$x..$y'
1 <0> enter
2 <;> nextstate(main 1 -e:1) v:{
3 <;> nextstate(main 1 -e:1) v:{
4 <0> pushmark sM
5 <|> range(other->6)[t3] lK/1 \
6 <#> gvsv[*y] s |
7 <1> flop lKM | Range op called
goto 8 | to produce a list.
f <#> gvsv[*x] s |
g <1> flip[t4] lK /
8 <#> gv[*_] s
9 <{> enteriter(next->a last->d redo->a) lK/8
b <0> iter s
c <|> and(other->a) vK/1
a <0> unstack v
goto b
d <2> leaveloop vK/2
e <@> leave[1 ref] vKP/REFC
-e syntax OK
$ perl -MO=Concise,-exec -e'1 for $x..$y'
1 <0> enter
2 <;> nextstate(main 1 -e:1) v:{
3 <;> nextstate(main 1 -e:1) v:{
4 <0> pushmark s
5 <#> gvsv[*x] s \ Args for enteriter/S
6 <#> gvsv[*y] s /
7 <#> gv[*_] s
8 <{> enteriter(next->9 last->c redo->9) lKS/8
a <0> iter s
b <|> and(other->9) vK/1
9 <0> unstack v
goto a
c <2> leaveloop vK/2
d <@> leave[1 ref] vKP/REFC
-e syntax OK
|