in reply to Re^4: Alternative matches
in thread Alternative matches

I wrote this code assuming the regexp would still be faster, and I wanted to prove it. I was shocked by what I found. I'm borrowing some of PodMaster's benchmark code. If there's something wrong with my testing let me know, but it sure looks like the index solution blows the regexp out of the water.
#!/usr/bin/perl use strict; use warnings; use Benchmark 'cmpthese'; use List::Util 'first'; my @words = qw[ new old number start simple cross heavy die exit ]; my $string = join ' 0\4/f ', map( { rand $_ } 1 .. 60), map { $words[ +rand @words ] } 1 .. 20; cmpthese (-3, { regexp => sub { return $string =~ /(new|old|number|start|simple|cross|heav +y|die|exit)/i; }, use_index => sub { my $lcstring = lc $string; return first {index($lcstring, $_) > -1} @words; } }); __END__ Rate regexp use_index regexp 1084/s -- -96% use_index 29469/s 2619% --

Replies are listed 'Best First'.
Re^6: Alternative matches
by PodMaster (Abbot) on Oct 06, 2004 at 13:02 UTC
    The benchmark looks fine, but if $string is 'nEw', regexp will return 'nEw', while use_index will return 'new'.

    MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
    I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
    ** The third rule of perl club is a statement of fact: pod is sexy.