cmpthese_times takes the data structure returned by Benchmark's cmpthese routine and prints the table with iteration times substituted for iterations per second. Consider:

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' ));

prints:

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->[$_]) fo +r 0 .. $#$row; } my $format = "%-$widths[0]s"; $format .= "%$widths[$_]s" for 1 .. $#widths; $format .= "\n"; printf $format, @$_ for @$rows; }