in reply to finding index number in an array
The first thing that comes to mind, in general:
This puts the index of the first member of @arr for which test returns true. test can be anything, including a pattern match, e.g.use List::Util 'first'; my $first_index = first { test( $arr[ $_ ] ) } 0..$#arr;
my $first_index = first { $arr[ $_ ] =~ /$pat/ } 0..$#arr;
BTW, you can achieve the same effect with grep, although less efficiently, because every element of the array will be tested:
my $first_index = ( grep test( $arr [$_ ] ), 0..$#arr )[ 0 ];
Update: I found BrowserUk's reply puzzling at first, but then I realized that we probably interpreted the OP's "nicer" in different ways. Let me then clarify that the solutions I proposed above all use what amounts to a foreach loop "under the hood," so they are "nicer" (maybe) only in a syntatic, not algorithmic, sense. In general, as BrowserUk asserts, there is no avoiding this sequential search (although by using first instead of grep the search is as efficient as possible).
the lowliest monk
|
|---|