[perl][sort]

複数の値をからめたソート

use strict;
use warnings;
use Data::Dumper;

my @hoge = (
    { age => 19, no => 1, area => 20 },
    { age => 12, no => 2, area => 88 },
    { age => 10, no => 3, area => 10 },
    { age => 12, no => 3, area => 10 },
    { age => 17, no => 5, area => 11 },
    { age => 13, no => 6, area => 13 },
    { age => 16, no => 7, area => 12 },
    { age => 11, no => 8, area => 15 },
    { age => 11, no => 9, area => 15 },
);

print join("\t", qw/area no age/ ) . "\n";
for my $hoge ( sort { $b->{area} <=> $a->{area} or  $a->{no} <=> $b->{no} or $a->{age} <=> $b->{age}  } @hoge ) {
    print join("\t", $hoge->{area}, $hoge->{no}, $hoge->{age} ) . "\n";
}

こっちの方がみやすいか。

area    no      age
88      2       12
20      1       19
15      8       11
15      9       11
13      6       13
12      7       16
11      5       17
10      3       10
10      3       12