* How do I find the first array element for which a condition is true?
+ added List::Util::first example
+ added foreach example for those without List::Util
+ adjusted for() example to match the other two.
i'm also trying something new - the first sentence of the answer includes
the question and the answer.
Index: perlfaq4.pod
===================================================================
RCS file: /cvs/public/perlfaq/perlfaq4.pod,v
retrieving revision 1.31
diff -u -d -r1.31 perlfaq4.pod
--- perlfaq4.pod 4 Sep 2002 22:32:19 -0000 1.31
+++ perlfaq4.pod 4 Sep 2002 23:06:42 -0000
@@ -1265,16 +1265,37 @@
=head2 How do I find the first array element for which a condition is true?
-You can use this if you care about the index:
+To find the first array element which satisfies a condition, you can
+use the first() function in the List::Util module, which comes with
+Perl 5.8. This example finds the first element that contains "Perl".
- for ($i= 0; $i < @array; $i++) {
- if ($array[$i] eq "Waldo") {
- $found_index = $i;
- last;
- }
- }
+ use List::Util qw(first);
+
+ my $element = first { /Perl/ } @array;
+
+If you cannot use List::Util, you can make your own loop to do the
+same thing. Once you find the element, you stop the loop with last.
-Now C<$found_index> has what you want.
+ my $found;
+ foreach my $element ( @array )
+ {
+ if( /Perl/ ) { $found = $element; last }
+ }
+
+If you want the array index, you can iterate through the indices
+and check the array element at each index until you find one
+that satisfies the condition.
+
+ my( $found, $i ) = ( undef, -1 );
+ for( $i = 0; $i < @array; $i++ )
+ {
+ if( $array[$i] =~ /Perl/ )
+ {
+ $found = $array[$i];
+ $index = $i;
+ last;
+ }
+ }
=head2 How do I handle linked lists?