Benchmark: running Ordinary, Schwartzian for at least 2 CPU seconds...
Ordinary: 2 wallclock secs ( 1.02 usr + 1.15 sys = 2.17 CPU) @ 55.30/s (n=120)
Schwartzian: 2 wallclock secs ( 1.81 usr + 0.36 sys = 2.17 CPU) @ 88.02/s (n=191)
####
#!perl
use warnings;
use strict;
use Benchmark qw(timethese);
our(@all, @sorted, @results);
for my $dir ("/bin/", "/usr/bin/") {
my $D;
opendir $D, $dir;
@all = readdir $D;
closedir $D;
chdir $dir;
print "$dir contains ".@all." files\n";
sub sort_ord {
@sorted = sort { -s $a <=> -s $b } @all;
}
sub sort_sch {
@results =
map $_->[0],
sort { $a->[1] <=> $b->[1] }
map [$_, -s $_],
@all;
}
sub sort_new {
my %h;
@h{@all} = map {-s $_} @all;
@results = sort { $h{$a}<=>$h{$b} } @all;
}
sub cmp_them {
join("\n", @sorted) eq join("\n", @results) or
die "bad sort";
}
sort_ord;
sort_sch; cmp_them;
sort_new; cmp_them;
timethese -5, {
Ordinary => \&sort_ord,
Schwartzian => \&sort_sch,
Strange => \&sort_new,
};
}
##
##
/bin/ contains 172 files
Benchmark: running Ordinary, Schwartzian, Strange for at least 5 CPU seconds...
Ordinary: 6 wallclock secs ( 2.18 usr + 3.08 sys = 5.26 CPU) @ 79.09/s (n=416)
Schwartzian: 5 wallclock secs ( 4.69 usr + 0.58 sys = 5.27 CPU) @ 134.72/s (n=710)
Strange: 5 wallclock secs ( 4.60 usr + 0.64 sys = 5.24 CPU) @ 178.44/s (n=935)
/usr/bin/ contains 1397 files
Benchmark: running Ordinary, Schwartzian, Strange for at least 5 CPU seconds...
Ordinary: 5 wallclock secs ( 1.91 usr + 3.15 sys = 5.06 CPU) @ 6.32/s (n=32)
Schwartzian: 5 wallclock secs ( 4.73 usr + 0.52 sys = 5.25 CPU) @ 12.95/s (n=68)
Strange: 5 wallclock secs ( 4.67 usr + 0.55 sys = 5.22 CPU) @ 15.33/s (n=80)