シュワルツ変換

mapやgrepがいまいち使いこなせていなかったけれど少しわかった気がする。

use strict;
use warnings;
my $date = [
            ["2009-02-23", "a"],
            ["2009-02-23", "b"],
            ["2009-02-21", "c"],
            ["2009-02-24", "d"],
            ["2009-02-23", "e"],
            ];

###########################################
my @list = map { $_->[0] } @{$date};
my @tmp = sort { $list[$a] cmp $list[$b] } 0..$#list;
my @result;
push @result, $date->[$_] for @tmp;
#print "$_->[0] -- $_->[1]\n" for @result;

###########################################
my @rs =
    map { $_->[0] }
    sort {$a->[1] cmp $b->[1] }
    map { [$_, $_->[0]] }
    @{$date};

print "$_->[0] --> $_->[1]\n" for @rs;