in reply to lsearch for perl?

Sure, grep will simplify that, with a minor change in behavior - maybe for the better.

sub lsearch { my $item = shift; grep { $item eq $_[$_] } 0 .. $#_; }
That will return the empty list for false, and otherwise a list of each index that succeeds

Usage becomes, for your example,

for (reverse lsearch $item, @list) { splice @list, $_, 1 } # or splice @list, $_, 1 for reverse lsearch $item, @list;
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.

An alternative is to define a winnow() function to do it all:

sub winnow { my $item = shift; grep { not $item eq $_ } @_; } @list = winnow $item, @list;
That is maybe less flexible, but I think cleaner.

After Compline,
Zaxo