Benchmark: running bare, grt, st, each for at least 3 CPU seconds...
bare: 3 wclk secs ( 3.02 usr + 0.00 sys = 3.02 CPU) @ 4.63/s (n=14)
grt: 4 wclk secs ( 3.15 usr + 0.00 sys = 3.15 CPU) @ 15.54/s (n=49)
st: 3 wclk secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 10.21/s (n=32)
Rate bare st grt
bare 4.63/s -- -55% -70%
st 10.2/s 120% -- -34%
grt 15.5/s 235% 52% --
####
Rate st bare grt
st 18009/s -- -21% -49%
bare 22661/s 26% -- -36%
grt 35616/s 98% 57% --
##
##
#!/usr/bin/perl
use strict;
use warnings;
use Text::Wrap qw(wrap);
use Benchmark qw(cmpthese);
my @words = qw(
EMBOSOM EMBOWED EMBOWEL EMBOWER EMBRACE EMBROIL EMBROWN EMBRUED EMBRUES
EMBRUTE EMBRYON EMBRYOS EMENDED EMENDER EMERALD EMERGED EMERGES EMERIES
EMERITA EMERITI EMERODS EMEROID EMERSED EMETICS EMETINE EMETINS EMEUTES
EMIGRES EMINENT EMIRATE EMITTED EMITTER EMODINS EMOTERS EMOTING EMOTION
EMOTIVE EMPALED EMPALER EMPALES EMPANEL EXFOLIATIONS EXHAUSTIVELY
EXHAUSTIVITY EXHIBITIONER EXHILARATING EXHILARATION EXHILARATIVE
EXHORTATIONS EXIGUOUSNESS EXOBIOLOGIES EXOBIOLOGIST
EXONERATIONS EXONUCLEASES EXOPEPTIDASE EXOPHTHALMIC
);
my $test={
st => sub {
my @sorted =
map { $_->[1] }
sort { $a->[0] <=> $b->[0] || $a->[1] cmp $b->[1] }
map { [ tr/eE/eE/, $_ ] } @words;
},
grt => sub {
my @sorted =
map { substr($_, 4) }
sort
map { pack("LA*", tr/eE/eE/, $_) } @words;
},
bare => sub {
my @sorted = sort { ($a =~ tr/eE/eE/) <=> ($b =~ tr/eE/eE/)
|| $a cmp $b } @words;
}
};
foreach my $t (keys %$test) {
print "Test '$t'\n",wrap("\t","\t",join(", ",$test->{$t}->())),"\n";
}
@words=map { ( $_ x 100 ) x 100 } @words;
cmpthese(-3,$test);
##
##
This is perl, v5.6.1 built for MSWin32-x86-multi-thread