in reply to For vs. While

Pop and shift without arguments work on the @_ array (in subroutines at least), and modifying arrays update: that is; adding or removing elements - modifying elements is fine while looping through them with for(each) is IIRC not even officially supported. Even though it appears to do more or less what I'd expect.

In short it doesn't work for exactly the reason you mentioned. :-)