use Benchmark qw (cmpthese); use constant { SEC => 0, MIN => 1, HOUR => 2, MDAY => 3, MON => 4, YEAR => 5, WDAY => 6, YDAY => 7, ISDST => 8, }; our $array = [ qw (sec min hour mday mon year wday yday isdst ) ]; our $hash = { qw (SEC sec MIN min HOUR hour MDAY mday MON mon YEAR year WDAY wday YDAY yday ISDST isdst ) }; sub array { my $a; $a |= $array->[SEC]; $a |= $array->[MIN]; $a |= $array->[HOUR]; $a |= $array->[MDAY]; $a |= $array->[MON]; $a |= $array->[YEAR]; $a |= $array->[WDAY]; $a |= $array->[YDAY]; $a |= $array->[ISDST]; $a; } sub hash { my $a; $a |= $hash->{'SEC'}; $a |= $hash->{'MIN'}; $a |= $hash->{'HOUR'}; $a |= $hash->{'MDAY'}; $a |= $hash->{'MON'}; $a |= $hash->{'YEAR'}; $a |= $hash->{'WDAY'}; $a |= $hash->{'YDAY'}; $a |= $hash->{'ISDST'}; $a; } cmpthese(-1, { 'ARRAY' => \&array, 'HASH' => \&hash, }); cmpthese(-1, { 'ARRAY' => sub { sort @$array }, 'HASH' => sub { sort values %$hash }, });