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. :-)