Sure, grep will simplify that, with a minor change in behavior - maybe for the better.
That will return the empty list for false, and otherwise a list of each index that succeedssub lsearch { my $item = shift; grep { $item eq $_[$_] } 0 .. $#_; }
Usage becomes, for your example,
so all instances of $item are removed from the array. The reverse call is needed to preserve the indexes from being shifted out of sync by splice.for (reverse lsearch $item, @list) { splice @list, $_, 1 } # or splice @list, $_, 1 for reverse lsearch $item, @list;
An alternative is to define a winnow() function to do it all:
That is maybe less flexible, but I think cleaner.sub winnow { my $item = shift; grep { not $item eq $_ } @_; } @list = winnow $item, @list;
After Compline,
Zaxo
In reply to Re: lsearch for perl?
by Zaxo
in thread lsearch for perl?
by matt.tovey
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |