in reply to Re: Regex for Differentiating Underscore and Whitespace
in thread Regex for Differentiating Underscore and Whitespace
In another response, grinder scrutinized your problem solution and offered a more efficient solution based on the index() function without any regular expressions.
I personally believe that the claim about efficiency is not correct, since that kind of regex should get optimized to index anyway - and often regexen have a more immediately readable syntax. For a Perl programmer that is...
I hope that the following minimal benchmark can shed some light:
#!/usr/bin/perl use strict; use warnings; use Benchmark qw/cmpthese :hireswallclock/; my @a = do { my @chr=(grep /\w/, map chr, 1..255); map { local $_ = join '', map $chr[rand @chr], 1..1000; tr/_/ / if .5<rand; $_; } 1..1000; }; cmpthese 5000 => { Regex => sub () { grep !/_/, @a }, Index => sub () { grep index($_, '_') < 0, @a } }; __END__
I get e.g.
C:\temp>perl index.pl Rate Index Regex Index 891/s -- -0% Regex 891/s 0% --
and
blazar@perlmonk ~ $ perl index.pl Rate Index Regex Index 261/s -- -0% Regex 262/s 0% --
on two different systems.
Now, is this test flawed? I easily tend to get these kinda things wrong, I must admit...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Regex for Differentiating Underscore and Whitespace
by mwah (Hermit) on Nov 04, 2007 at 14:09 UTC |