#!/usr/bin/perl -d:NYTProf
use warnings;
use strict;
use String::Util 'trim';
use Benchmark qw(cmpthese timethese);
cmpthese(
-30,
{
compress_1 => q|compress_1(' Mary had a little lamb. ');|,
compress_2 => q|compress_2(' Mary had a little lamb. ');|,
compress_3 => q|compress_3(' Mary had a little lamb. ');|,
squash => q|squash(' Mary had a little lamb. ');|,
split_join => q|split_join(' Mary had a little lamb. ');|,
}
);
print "'compress_1' => '",compress_1(' Mary had a little lamb. '),"'\n";
print "'compress_2' => '",compress_2(' Mary had a little lamb. '),"'\n";
print "'compress_3' => '",compress_3(' Mary had a little lamb. '),"'\n";
print "'squash' => '",squash(' Mary had a little lamb. '),"'\n";
print "'split_join' => '",split_join(' Mary had a little lamb. '),"'\n";
exit;
sub compress_1 {
my $string = shift;
$string =~ s/ +/ /g;
return $string;
}
sub compress_2 {
my $string = shift;
$string =~ s/\h+/ /g;
return $string;
}
sub compress_3 {
my $string = shift;
$string =~ s/ {1,}/ /g;
return $string;
}
sub squash {
my $string = shift;
$string =~ tr/ //s;
return $string;
}
sub split_join {
my $string = shift;
$string = join ' ', split ' ', $string;
return $string;
}
####
#!/usr/bin/perl -d:NYTProf
use warnings;
use strict;
use String::Util 'trim';
use Benchmark qw(cmpthese timethese);
cmpthese(
-30,
{
'double_star' => q|double_star(' Mary had a little lamb. ');|,
'double_plus' => q|double_plus(' Mary had a little lamb. ');|,
'double_plus2' => q|double_plus(' Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. ');|,
'replace' => q|replace( ' Mary had a little lamb. ');|,
'for_star' => q|for_star( ' Mary had a little lamb. ');|,
'for_plus' => q|for_plus( ' Mary had a little lamb. ');|,
'regex_or' => q|regex_or( ' Mary had a little lamb. ');|,
'one_liner' => q|one_liner( ' Mary had a little lamb. ');|,
'trim' => q|trim( ' Mary had a little lamb. ');|,
}
);
print "'trim' => '",trim(' Mary had a little lamb. '),"'\n";
print "'double_star' => '",double_star(' Mary had a little lamb. '),"'\n";
print "'double_plus' => '",double_plus(' Mary had a little lamb. '),"'\n";
print "'double_plus2' => '",double_plus(' Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. '),"'\n";
print "'replace' => '",replace( ' Mary had a little lamb. '),"'\n";
print "'for_star' => '",for_star( ' Mary had a little lamb. '),"'\n";
print "'for_plus' => '",for_plus( ' Mary had a little lamb. '),"'\n";
print "'regex_or' => '",regex_or( ' Mary had a little lamb. '),"'\n";
print "'one_liner' => '",one_liner( ' Mary had a little lamb. '),"'\n";
exit;
sub one_liner {
my $string = shift;
# $string =~ s/^\ *([A-Z,a-z,0-9]*)\ *$/$1/g;
$string =~ s/^\s+|\s+$//g ;
return $string;
}
sub double_star {
my $string = shift;
$string =~ s/^\s*//;
$string =~ s/\s*$//;
return $string;
}
sub double_plus {
my $string = shift;
$string =~ s/^\s+//; #remove leading spaces
$string =~ s/\s+$//; #remove trailing spaces
return $string;
}
sub replace {
my $string = shift;
$string =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
return $string;
}
sub for_star {
my $string = shift;
for ($string) { s/^\s+//; s/\s+$//; }
return $string;
}
sub for_plus {
my $string = shift;
for ($string) { s/^\s*//; s/\s*$//; }
return $string;
}
sub regex_or {
my $string = shift;
$string =~ s/(?:^ +)||(?: +$)//g;
return $string;
}
####
ted@linux-jp04:~/Work/Projects/misc.tests> ./compress.multiple.spaces.to.single.space.pl
Rate compress_3 compress_1 compress_2 split_join squash
compress_3 135174/s -- -2% -6% -34% -45%
compress_1 137798/s 2% -- -4% -33% -44%
compress_2 143178/s 6% 4% -- -30% -42%
split_join 205421/s 52% 49% 43% -- -17%
squash 247547/s 83% 80% 73% 21% --
'compress_1' => ' Mary had a little lamb. '
'compress_2' => ' Mary had a little lamb. '
'compress_3' => ' Mary had a little lamb. '
'squash' => ' Mary had a little lamb. '
'split_join' => 'Mary had a little lamb.'
ted@linux-jp04:~/Work/Projects/misc.tests> ./trim.ws.pl
Rate double_plus2 regex_or trim for_plus for_star double_star one_liner double_plus replace
double_plus2 69971/s -- -5% -21% -28% -36% -37% -43% -46% -46%
regex_or 73562/s 5% -- -17% -24% -33% -34% -40% -43% -44%
trim 88942/s 27% 21% -- -8% -19% -20% -27% -32% -32%
for_plus 96591/s 38% 31% 9% -- -12% -13% -21% -26% -26%
for_star 109941/s 57% 49% 24% 14% -- -1% -10% -16% -16%
double_star 111060/s 59% 51% 25% 15% 1% -- -9% -15% -15%
one_liner 122651/s 75% 67% 38% 27% 12% 10% -- -6% -6%
double_plus 130149/s 86% 77% 46% 35% 18% 17% 6% -- -0%
replace 130236/s 86% 77% 46% 35% 18% 17% 6% 0% --
'trim' => 'Mary had a little lamb.'
'double_star' => 'Mary had a little lamb.'
'double_plus' => 'Mary had a little lamb.'
'double_plus2' => 'Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb. Mary had a little lamb.'
'replace' => 'Mary had a little lamb.'
'for_star' => 'Mary had a little lamb.'
'for_plus' => 'Mary had a little lamb.'
'regex_or' => 'Mary had a little lamb.'
'one_liner' => 'Mary had a little lamb.'
ted@linux-jp04:~/Work/Projects/misc.tests>