#!/usr/bin/perl
use Benchmark qw(cmpthese);
$substr = join('','a'..'j');
$str = $substr x 90 . 'hTmL'. $substr x 2000;
print "length of search string: ",length $str, "\n";
cmpthese(-3, {
'Fregex ' => sub {
$str =~ /^\A.{0,996}?html/si
or $str =~ /^\A.{0,996}?sgml/si;
},
'Fsubstr' => sub {
substr( $str, 0, 1000) =~ /sgml/i
or substr( $str, 0, 1000) =~ /html/i;
},
'Findex ' => sub {
1+index( lc substr( $str, 0, 1000 ), 'sgml' )
or 1+index( lc substr( $str, 0, 1000 ), 'html' )
},
'Rregex ' => sub {
$str =~ /^\A.{0,996}?sgml/si
or $str =~ /^\A.{0,996}?html/si;
},
'Rsubstr' => sub {
substr( $str, 0, 1000) =~ /sgml/i
or substr( $str, 0, 1000) =~ /html/i;
},
'Rindex' => sub {
1+index( lc substr( $str, 0, 1000 ), 'sgml' )
or 1+index( lc substr( $str, 0, 1000 ), 'html' )
},
});
print substr $str, 900, 10;
__END__
root@swill ~/PerlMonks$ ./string_search2.pl
length of search string: 20904
Rate Rregex Fregex Rsubstr Fsubstr Findex Rindex
Rregex 48562/s -- -35% -54% -54% -55% -55%
Fregex 75225/s 55% -- -28% -29% -30% -30%
Rsubstr 104700/s 116% 39% -- -1% -2% -3%
Fsubstr 105896/s 118% 41% 1% -- -1% -1%
Findex 107056/s 120% 42% 2% 1% -- -0%
Rindex 107434/s 121% 43% 3% 1% 0% --
hTmLabcdef
root@swill ~/PerlMonks$
Update: Had I used my brain, I'd've changed the $str definition to use 'sGmL' rather than edit the function definitions....
...roboticus
There are lies, damned lies, and benchmarks.
|