[Perl]複数カラムのあるデータのソート

ソートは昇順として実装してあります.
Perlのバージョンが5.8.6以降でないとsort関数が安定じゃないのでこれより新しいものにして下さい.
区切られてる文字によって
16行目

    my @strlist = split(/ /, $_);

を変えて下さい.

use strict;
use warnings;

my $input_file_path = shift;
my $output_file_path = shift;

my @sort_key = @ARGV;
my $sort_key_number = @sort_key;
my @sort_target;

open my $fh, "< ".$input_file_path;
my $index = 0;
while(<$fh>){
    chomp($_);
    #space一個でカラムが区切られてるとする.
    my @strlist = split(/ /, $_);
    my $hash;
    foreach my $key(@sort_key){
        $hash->{$key} = $strlist[$key];
    }
    $hash->{"index"} = $index;
    push(@sort_target, $hash);
    $index++;
}
close($fh);
#sort
my @sorted = @sort_target;

foreach my $key(reverse @sort_key){
    @sorted = sort { $a->{$key} <=> $b->{$key} } @sorted;
}
open my $out, ">".$output_file_path;
foreach my $hash_tmp (@sorted){
    my $index_number = $hash_tmp->{"index"};
    my $i = 0;
    open my $in, "< ".$input_file_path;
    while(<$in>){
        if($i eq $index_number){
            print $out $_;
            last;
        }else{
            $i++;
        }
    }
    close($in)
}
close($out);


使い方は,

$perl MargeSort.pl 入力ファイル 出力ファイル ソート順位が高い順に列数を指定(0から始まる)
例)
$perl MargeSort.pl test2.dat hoge.txt 0 1
      • 追記

id:hidekiyに指摘をもらったので訂正します.
chompの部分とか致命的ですね.