>>82
試しに書いてみた。
sub csvsort {
  my $arrayref = shift;
  my @cmps;
  while (my($n,$cmp) = splice(@_,0,2)) {
    ++$n;
    $cmp =~ s/(\$[ab])/$1\->[$n]/g;
    push @cmps, "($cmp)";
  }
  my $fcmp = eval("sub {" . join("||", @cmps) . "}");
  map $_->[0], sort { &$fcmp } map [$_, split /,/], @$arrayref;
}

# @csvを「要素2を文字列昇順、要素0を数値降順」のオーダーでソート
@sorted = csvsort(\@csv, 2=>'$a cmp $b', 0=>'$b <=> $a');