Is that code an example or is that the specific instance you're
trying to replace? Because if the latter, you can just use grep:
in reply to Help me not use for($i=0;$i=$#array;$i++)...Please!
Actually this isn't exactly the same, because your code has a bug,
assuming that your goal is to weed out elements equal to 5.
(That's the goal, right? If not, never mind.)
my @array = grep $_ != 5, 0..9;
The bug is that you're altering the array while progressing through
the loop, which means that you skip certain elements. Try your
code on this array:
Only the first 5 will be removed, because after splice-ing out
the first 5, the index of the 5 following it has just decreased by
1. But the loop counter increments, and you end up skipping
the 5 following it.
my @array = qw(0 1 2 3 4 5 5 6 7 8 9 );
As for your general question, which seems to be, is there a way
to get rid of reliance on loop counters when iterating through
arrays. And that's a good question, and I don't really think there
is a good way. There isn't a magic variable for "index into an
array" when in a foreach loop. Although perhaps there should
be; Dominus has a post about this.
All the same, though, you should probably refrain from altering
an array while iterating over it.