use strict;
use warnings;
use Benchmark qw(cmpthese);
use List::Util qw(max);
cmpthese_times (cmpthese (-1, {
split => sub {split '', 'whoop whoop pull up'},
regex => sub {'whoop whoop pull up' =~ /([^\s]*)/g}
},
'none'
));
####
Time split regex
split 9.49e-006s -- -96%
regex 3.43e-007s 2667% --
####
sub cmpthese_times {
my $rows = shift;
my @widths;
for my $row (@$rows) {
next if $row->[1] =~ s/Rate/Time/;
my ($value) = $row->[1] =~ m!(\d+)/s!;
next unless defined $value;
$row->[1] = sprintf '%6.2es', 1.0 / $value;
}
for my $row (@$rows) {
$widths[$_] = max ($widths[$_] || 0, 1 + length $row->[$_]) for 0 .. $#$row;
}
my $format = "%-$widths[0]s";
$format .= "%$widths[$_]s" for 1 .. $#widths;
$format .= "\n";
printf $format, @$_ for @$rows;
}