note
l3v3l
seems that lookahead grep is the <i>slightly</i> faster solution ...
here is the test script I used:
<c>
#!/usr/bin/perl -w
# usage : ./this_script.pl < input_file > captured_benchmarks
use strict;
use Benchmark;
my @data=<>;
my (@res1,@res2,@res3);
timethese (100000000,
{ grep_and => q{
@res1 = grep /GGGGGACACCTTCTCTCTCT/ && /RH_MEa0001bG06/, @data;
},
double_grep => q{
@res2 = grep /GGGGGACACCTTCTCTCTCT/,grep /RH_MEa0001bG06/,@data;
},
lookahead_grep => q{
@res3 = grep /^(?=.*GGGGGACACCTTCTCTCTCT)(?=.*RH_MEa0001bG06)/,@data;
}
}
);
</c>
... and the results
<c>
Benchmark: timing 100000000 iterations of double_grep, grep_and, lookahead_grep...
double_grep :
27 wallclock secs (26.98 usr + 0.00 sys = 26.98 CPU) @ 3705899.79/s (n=100000000)
grep_and :
24 wallclock secs (23.05 usr + 0.00 sys = 23.05 CPU) @ 4338959.52/s (n=100000000)
lookahead_grep :
24 wallclock secs (22.83 usr + 0.00 sys = 22.83 CPU) @ 4380585.25/s (n=100000000)
</c>
514884
514885