use strict; use warnings; use Benchmark qw(cmpthese); my $short = q( a b c ); my $long = join('x', map {' ' x (int(rand(20))+1)} 1 .. 100); my %func = ( triple_s => <<'EOFUNC', sub { my $str = $_; $str =~ s/^\s*//; $str =~ s/\s*$//; $str =~ s/\s+/ /g; $str; } EOFUNC double_s => <<'EOFUNC', sub { my $str = $_; $str =~ s/^\s*|\s*$//; $str =~ s/\s+/ /g; $str; } EOFUNC join_split => <<'EOFUNC', sub { my $str = $_; join ' ', split ' ', $str; } EOFUNC ); sub make { my ($str, $f) = @_; ($f = $func{$f}) =~ s/_/$str/; eval $f; } print "\nShort string:\n"; cmpthese(-1, { 'triple-s' => make(qw(short triple_s)), 'double-s' => make(qw(short double_s)), 'join-split' => make(qw(short join_split)), }); print "\nLong string:\n"; cmpthese(-1, { 'triple-s' => make(qw(long triple_s)), 'double-s' => make(qw(long double_s)), 'join-split' => make(qw(long join_split)), });