Finally, I would be glad to verify your second claim if you can provide the input string upon which rollahead and unroll return different results. I believe such a string does not exist.
Actually, it was your own benchmark:
#! perl -slw
use strict;
use Benchmark ':all', ':hireswallclock';
my $x = "#@##@###@####@#####@";
my $y = reverse $x;
my $z = "$x$x$x$y$y$x$x$y$y$y$y$y$x$x$x$x";
our %results;
cmpthese -3, {
unroll => sub {
my @x = ([unroll($x)],[unroll($y)],[unroll($z)]);
$results{ unroll } = \@x;
},
rollahead => sub {
my @x = ([rollahead($x)],[rollahead($y)],[rollahead($z)]);
$results{ rollahead } = \@x;
},
lookbehind => sub {
my @x = ([lookbehind($x)],[lookbehind($y)],[lookbehind($z)]);
$results{ lookbehind } = \@x;
},
};
printf "%20s => %s\n", $_, "@{[ map{ qq[@$_] } @{ $results{ $_ } } ]}
+" for keys %results;
sub unroll {
my @x = $_[0] =~ /(?:^|@)((?:##|#@|[^#@])*)/g;
for(@x){
$_ =~ s/##/#/g;
$_ =~ s/#@/@/g;
} @x
}
sub rollahead {
my $x = shift;
$x = reverse $x;
my @x = reverse(split/\@(?=(?:##)*(?!#))/,$x,-1);
for(@x){
$_ = reverse;
$_ =~ s/##/#/g;
$_ =~ s/#@/@/g;
} @x
}
sub lookbehind {
my $x = shift;
split m[ (?: (?<=[^#]\#\#\#\#) | (?<=[^#]\#\#) | (?<!\#) ) [@] ]x,
+ $x;
}
Output (read'em and weep:): C:\test>junk8
Rate unroll rollahead lookbehind
unroll 3096/s -- -3% -33%
rollahead 3175/s 3% -- -32%
lookbehind 4639/s 50% 46% --
rollahead => @# #@## ##@ ##@## #@# # @# #@## ##@@# #@## ##
+@@# #@## ##@ ##@## #@# @##@## #@# # # #@## ##@@# #@## ##@ ##@## #@# @
+##@## #@# @##@## #@# @##@## #@# @##@## #@# # # #@## ##@@# #@## ##@@#
+#@## ##@@# #@## ##@
unroll => @# #@## ##@ ##@## #@# @# #@## ##@@# #@## ##@
+@# #@## ##@ ##@## #@# @##@## #@# # # #@## ##@@# #@## ##@ ##@## #@# @#
+#@## #@# @##@## #@# @##@## #@# @##@## #@# # # #@## ##@@# #@## ##@@# #
+@## ##@@# #@## ##@
lookbehind => #@## ###@#### #####@ #####@#### ###@## # #@##
+ ###@#### #####@#@## ###@#### #####@#@## ###@#### #####@ #####@#### #
+##@## #@#####@#### ###@## ## ## ###@#### #####@#@## ###@#### #####@ #
+####@#### ###@## #@#####@#### ###@## #@#####@#### ###@## #@#####@####
+ ###@## #@#####@#### ###@## ## ## ###@#### #####@#@## ###@#### #####@
+#@## ###@#### #####@#@## ###@#### #####@
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|