I inserted a print statement into your code that may help you understand what's happening:
my @ary = (0..1000); for (@ary) { if($_ <= 1000) { print; shift @ary; } } print scalar @ary, "\n"; ################## my comments: the for loop looks at the first element (0), @ary gets shifted inside the loop, then the for loop looks at the second element in @ary, which is now 2, since the 0 was shifted off the front. @ary is shifted again inside and then the for loop looks at the third element remaining in @ary which is 4. Eventually, the for loop looks at the 501st element remaining in @ary, 1000, and shifts @ary one last time, leaving 500 elements in @ary (501..1000) -----Original Message----- From: Luke Bakken [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 21, 2002 2:55 PM To: [EMAIL PROTECTED] Subject: shift inside of for loop Hi all, I've noticed some interesting behavior when trying to shift an array that you're iterating over. For example: my @ary = (0..1000); for (@ary) { if($_ <= 1000) { shift @ary; } } print scalar @ary, "\n"; This prints 500 on my NT box with ActiveState perl. I would naively expect the shift to shift all elements of the array off, because they all are less than or equal to 1000. Am I expecting behavior to be defined that isn't? Thanks, Luke Bakken -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]