in reply to improve performance
Consider if you can use the none function from List::Util for operations like (! grep ). grep will check the entire list to find all the values that match, but in this case, once you have found a match you might as well stop. Some of the List::Util functions, like first or any or none, will short circuit.
In this example, the variable $j shows how many times the loop body is executed.
use strict; use warnings; use List::Util qw(none); my @list = 1..100; my $j = 0; if (! grep { $j++; $_ > 10 } @list ) { print 'Didn\'t find any values above 10 ... ' } else { print 'Found some values above 10 ... ' } print "but I had to look at $j values to be sure.\n"; $j = 0; if (none { $j++; $_ > 10 } @list) { print 'Didn\'t find any values above 10 ... ' } else { print 'Found some values above 10 ... ' } print "but I had to look at $j values to be sure.\n";
Output:
Found some values above 10 ... but I had to look at 100 values to be s +ure. Found some values above 10 ... but I had to look at 11 values to be su +re.
Update: forgot to copy the code that actually produces that output!
|
|---|