#!/usr/bin/perl # regindbench - which is faster, regexp for fixed text patterns or index()? use strict; use Benchmark qw/:all/; sub random { int rand shift } my @letters=('A'..'Z'); my $nLetters=scalar @letters; my $text=join('',map { $letters[random($nLetters)] } 0..9999); # 10,000 chars my ($pat,@pats); map { do { $pat=join('',map { $letters[random($nLetters)] } 0..4); # 5 char patterns } until index($text,$pat)==-1; # which never match push @pats,$pat; } 0..99; sub via_regexp { map { die "via_regexp $_ found\n" if $text=~/$_/ } @pats; } sub via_index { map { die "via_index $_ found\n" if index($text,$_)>-1 } @pats; } cmpthese(100000,{regexp=>\&via_regexp,index=>\&via_index}); exit; __END__ Perl 5.8.8 using 100000 iterations on a 3 GHz 64-bit Intel QuadCore running Fedora Core 7 (6000 bogomips per core) Rate index regexp index 370/s -- -47% regexp 695/s 88% --