例えば
●先頭から16個目のデータをキーにしてソートする場合
@address = sort{(split(/,/,$a))[15] <=> (split(/,/,$b))[15]} @address;
●先頭から16個目のデータを1次キー、3つ目のデータを2次キーとしてソートする場合
@address = sort{(split(/,/,$a))[15] <=> (split(/,/,$b))[15] or (split(/,/,$a))[2] <=> (split(/,/,$b))[2]} @address;

ここで、ソート部をサブルーチン化しろとの上司の命令。以下のように書いてみました。
#&datasort(データの型,並べ順,並べ替え時のキー,配列)
#データの型:数値は1、文字列は2
#並べ順:昇順は1、降順は2
#並べ替え時のキー:先頭は0、3番目なら2、5番目なら4という具合。
@address = &datasort(1,1,15,@address);

#並べ替え部のルーチン
sub datasort{
 #$format:数値は1、文字列は2 $order:昇順は1、降順は2 $key:ソート対象のキー、先頭は0、5番目なら4など。
 my ($format,$order,$key,@data) = @_;
 if($format == 1){
  if($order == 1){@data = sort{(split(/,/,$a))[$key] <=> (split(/,/,$b))[$key]} @data;}
  elsif($order == 2){@data = sort{(split(/,/,$b))[$key] <=> (split(/,/,$a))[$key]} @data;}
 }elsif($format == 2){
  if($order == 1){@data = sort{(split(/,/,$a))[$key] cmp (split(/,/,$b))[$key]} @data;}
  elsif($order == 2){@data = sort{(split(/,/,$b))[$key] cmp (split(/,/,$a))[$key]} @data;}
 }
 return @data;
}
で、複数のキーを使ってソートする場合の呼び出し方がわかりません。
@address = &datasort(1,1,15,@address) or &datasort(1,1,2,@address);
だと、当然のことながらorより後ろは動かない。
誰か教えてくださいませ。。
それか、サブルーチンの書き方がおかしい?