in reply to Strange aliasing(?) when modifying variable in range operator

Before writing a one-liner, try writing the code as a .pl file with
use strict; use warnings;
Your code actually does give an output:
C:\....\Projects>perl -wE "@a=1..9; $i=0; say @a[$i..($i+=3)-1] while +$i<@a" C:\....\Projects>perl>
Those blank lines are "output".