UPDATE: samtregar beat me to the punch. But, based on your question, I think a random string containing X's and non-x characters is a more valid test for benchmarking....Just my humble opinion.
Your question was interesting so I ran a quick benchmark..... Both on my linux box and a windows machine. both showed that the regex with the plus was a little faster. For the reasons pointed out by kvale.
Benchmark code:
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark;
$| = 1;
my $clean="kljansdljzxnkxnlkxjnxlkjnxlkxxxlkjnlkjnlkxjnkxjnlkxjnlxkjnl
+kxxluhasiuuhxkxhkxhxxxxlkjsndifnhskxhkxhx";
timethese
(
10000000,
{
'with plus' => sub { &plus},
'without plus' => sub { &no_plus },
}
);
sub no_plus
{
my $temp=$clean;
$temp=~s/x//g;
}
sub plus
{
my $temp=$clean;
$temp=~s/x+//g;
}
Results (from windows)
C:\Documents and Settings\Kevin\My Documents\scripts>test.pl
Benchmark: timing 10000000 iterations of with plus, without plus...
with plus: 75 wallclock secs (72.48 usr + 0.01 sys = 72.49 CPU) @ 13
+7959.58/s (n=10000000)
without plus: 86 wallclock secs (84.41 usr + 0.01 sys = 84.42 CPU) @
+118453.94/s (n=10000000)
Results (from Linux)
kevin@kevin-linux:~> perl test.pl
Benchmark: timing 10000000 iterations of with plus, without plus...
with plus: 124 wallclock secs (123.54 usr + 0.00 sys = 123.54 CPU) @
+ 80945.44/s (n=10000000)
without plus: 146 wallclock secs (146.38 usr + 0.00 sys = 146.38 CPU)
+ @ 68315.34/s (n=10000000)
-Kevin
my $a='62696c6c77667269656e6440676d61696c2e636f6d';
while ($a=~m/(^.{2})/s)
{print unpack('A',pack('H*',"$1"));$a=~s/^.{2}//s;}