use Benchmark qw{ timethese }; timethese( -2, { Ordinary => q{ my @results = sort { -M $a <=> -M $b } glob "/bin/*"; }, Schwartzian => q{ map $_->[0], sort { $a->[1] <=> $b->[1] } map [$_, -M], glob "/bin/*"; }, }); #### #!/usr/bin/perl use strict; use Benchmark; $L::glob = "/usr/local/*/*"; @L::files = glob $L::glob; print "Testing with " . @L::files . " files\n"; my $transform = q|map $_->[0], sort { $a->[1] <=> $b->[1] } map [ $_, -M ]|; my $sort = q|sort { -M $a <=> -M $b }|; my $code = { assign => q| my @r = @L::files |, 'glob' => q| my @files = glob $L::glob |, sort_names => q| sort { $a cmp $b } @L::files |, sort_names_assign => q| my @r = sort { $a cmp $b } @L::files |, sort_times_assign => q| my @r = $sort @L::files |, ordinary_orig => qq| my \@r = $sort glob \$L::glob |, ordinary_mod => qq| my \@r = $sort \@L::files |, schwartz_orig => qq| $transform, glob \$L::glob |, schwartz_orig_assign => qq| my \@r = $transform, glob \$L::glob |, schwartz_mod => qq| my \@r = $transform, \@L::files |, } ; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # print "Timing for 2 CPU seconds...\n"; timethese( -2, $code ); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # my $iterations = 1_000; print "-" x 73, "\n"; print "Timing for $iterations iterations\n"; timethese( $iterations, $code ); #### albook_brian[519]$ perl benchmark Testing with 380 files Timing for 2 CPU seconds... Benchmark: running assign, glob, ordinary_mod, ordinary_orig, schwartz_mod, schwartz_orig, schwartz_orig_assign, sort_names, sort_names_assign for at least 2 CPU seconds... assign: (2.03 usr + 0.00 sys = 2.03 CPU) (n= 6063) glob: (0.81 usr + 1.27 sys = 2.08 CPU) (n= 372) ordinary_mod: (0.46 usr + 1.70 sys = 2.16 CPU) (n= 80) ordinary_orig: (0.51 usr + 1.64 sys = 2.15 CPU) (n= 66) schwartz_mod: (1.54 usr + 0.51 sys = 2.05 CPU) (n= 271) schwartz_orig: (1.06 usr + 1.03 sys = 2.09 CPU) (n= 174) schwartz_orig_assign: (1.20 usr + 0.87 sys = 2.07 CPU) (n= 156) sort_names: (2.09 usr + 0.01 sys = 2.10 CPU) (n=3595626) sort_names_assign: (2.16 usr + 0.00 sys = 2.16 CPU) (n= 5698) ------------------------------------------------------------------------- Timing for 1000 iterations Benchmark: timing 1000 iterations of assign, glob, ordinary_mod, ordinary_orig, schwartz_mod, schwartz_orig, schwartz_orig_assign, sort_names, sort_names_assign... assign: 1 secs ( 0.33 usr + 0.00 sys = 0.33 CPU) glob: 6 secs ( 2.31 usr + 3.30 sys = 5.61 CPU) ordinary_mod: 28 secs ( 5.57 usr + 21.49 sys = 27.06 CPU) ordinary_orig: 34 secs ( 7.86 usr + 24.74 sys = 32.60 CPU) schwartz_mod: 8 secs ( 5.12 usr + 2.47 sys = 7.59 CPU) schwartz_orig: 12 secs ( 6.63 usr + 5.52 sys = 12.15 CPU) schwartz_orig_assign: 14 secs ( 7.76 usr + 5.41 sys = 13.17 CPU) sort_names: 0 secs ( 0.00 usr + 0.00 sys = 0.00 CPU) sort_names_assign: 0 secs ( 0.39 usr + 0.00 sys = 0.39 CPU) #### Benchmark: timing 1000 iterations of glob, ordinary_mod, schwartz_mod, schwartz_orig_assign... glob: 14 secs ( 6.28 usr + 8.00 sys = 14.28 CPU) ordinary_mod: 73 secs (14.25 usr + 57.05 sys = 71.30 CPU) ordinary_orig: 93 secs (20.83 usr + 66.14 sys = 86.97 CPU) schwartz_mod: 20 secs (14.06 usr + 5.52 sys = 19.58 CPU) schwartz_orig: 32 secs (17.38 usr + 13.59 sys = 30.97 CPU) schwartz_orig_assign: 34 secs (19.95 usr + 13.60 sys = 33.55 CPU) #### Benchmark: timing 1000 iterations of glob, ordinary_mod, schwartz_mod, schwartz_orig_assign... glob: 148 secs ( 31.26 usr + 102.59 sys = 133.85 CPU) ordinary_mod: 675 secs ( 86.64 usr + 517.19 sys = 603.83 CPU) ordinary_orig: 825 secs (116.55 usr + 617.62 sys = 734.17 CPU) schwartz_mod: 151 secs ( 68.88 usr + 67.32 sys = 136.20 CPU) schwartz_orig: 297 secs ( 89.33 usr + 174.51 sys = 263.84 CPU) schwartz_orig_assign: 294 secs ( 96.68 usr + 168.76 sys = 265.44 CPU)