#! /usr/bin/perl use strict; use warnings; use Benchmark qw( cmpthese ); use List::Util qw( shuffle ); my @unsorted = shuffle map { { $_ => [] } } 'aaa' .. 'bbb'; warn "Testing with ", scalar(@unsorted), " values.\n"; cmpthese( -1, { direct => \&direct_sort, ST => \&schwartzian, }); sub direct_sort { return sort { (keys %$a)[0] cmp (keys %$b)[0] } @unsorted; } sub schwartzian { return map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, keys %$_ ] } @unsorted; }