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...
In reply to Re^2: Regex for Differentiating Underscore and Whitespace
by blazar
in thread Regex for Differentiating Underscore and Whitespace
by neversaint
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |