in reply to Comparing Regular Expressions

You could try this
#!/usr/bin/perl -- use strict; use warnings; use Benchmark 'cmpthese'; { my $small = join'', map { ' ' x (int rand 2) . ','. (int rand 2) +.$_ } 0 .. 1_000; cmpthese(-3,{ 'small1' => sub { my $f = $small; $f =~ s/\s+,\s+|\s+,|,\s+/,/ +g; }, 'small2' => sub { my $f = $small; $f =~ s/\s*,\s*/,/g; }, }); undef $small; } print "\n"; { # 1_000_000 was too much for my machine my $bigg = join'', map { ' ' x (int rand 2) . ','. (int rand 2). +$_ } 0 .. 200_000; cmpthese(-3,{ 'bigg1' => sub { my $f = $bigg; $f =~ s/\s+,\s+|\s+,|,\s+/,/g; + }, 'bigg2' => sub { my $f = $bigg; $f =~ s/\s*,\s*/,/g; }, }); undef $bigg; } __END__ perl 5.10.1 Rate small1 small2 small1 365/s -- -69% small2 1171/s 221% -- Rate bigg1 bigg2 bigg1 1.27/s -- -77% bigg2 5.41/s 327% -- perl 5.8.8 Rate small1 small2 small1 785/s -- -51% small2 1587/s 102% -- Rate bigg1 bigg2 bigg1 2.59/s -- -62% bigg2 6.86/s 165% --

Replies are listed 'Best First'.
Re^2: Comparing Regular Expressions
by vitoco (Hermit) on Sep 01, 2009 at 14:50 UTC

    Question: Are both versions of perlrunning in the same box? If so, 5.8.8 seems to be faster that 5.10.1 for both regexps!

    From these results, s/\s*,\s*/,/ is faster than the longer one. Backtracking is better than alternations? Replacing always is better than selective ones?