in reply to Re^2: foreach argument modification inside loop, followed by return from loop
in thread foreach argument modification inside loop, followed by return from loop

Actually, it's more like:

No, it isn't.

The OP's code stops at the first occurrence. Yours does not. Hence, you (may) end up removing additional elements, per your own example:

Test code as copied from original nodes:

# shawnhcorey's code: my @a = ( 1, 2, 3, 4, 2, 5, 7 ); my $last = $#a; my $i = 0; while( $i <= $last ){ if( $a[$i] == 2 ){ $last --; last if $i > $last; } }continue{ $i ++; } $#a = $last; say "shawnhcorey: @a"; # OP's code @a = ( 1, 2, 3, 4, 2, 5, 7 ); for (@a) { if ($_ == 2) { pop @a; last } } say " OP vsespb: @a";

Output:

shawnhcorey: 1 2 3 4 2 OP vsespb: 1 2 3 4 2 5

Anyway, this is moot now that the OP has posted actual code which uses splice to remove an internal element rather than the last element via pop.