Go to the first, previous, next, last section, table of contents.

sort

`sort(SUBROUTINE LIST)'
`sort(LIST)'
`sort SUBROUTINE LIST'
`sort BLOCK LIST'
`sort LIST'
LIST をソートし、ソートされた配列を返す。 配列中の存在しない値は除かれる。 SUBROUTINE または BLOCK を省略すると、 標準的な文字列比較の順でソートする。 SUBROUTINE を指定するときは、配列の要素の並べ替えかたに応じて、 0 より小、0、0 より大の整数値を返すサブルーチンの名前を指定する。 (このためのサブルーチンにおいては、 <=>cmp といった演算子が大変便利である。) SUBROUTINE はスカラー変数の名前でもよい。 この場合その変数の値が使用するサブルーチンの名前を表す。 サブルーチン名の代わりに任意の BLOCK を指定して、 インラインのソートサブルーチンとすることができる。 効率を良くするため、通常のサブルーチンコールをとばしている。 このため、次の影響がある。 サブルーチンは再帰的であってはならない。 また、比較される 2 要素は @_ を通じてではなく、 $a$b を通じてサブルーチンに渡される。(以下の例を参照。) これらは参照渡しであるので、$a$b を変更してはいけない。 例:
# 辞書順でソート
@articles = sort @files;

# 同様のものでソートルーチンを明示したもの
@articles = sort {$a cmp $b;} @files;

# 同様のもので逆順
@articles = sort {$b cmp $a;} @files;

# 数値的に昇順にソート
@articles = sort {$a <=> $b;} @files;

# 数値的に降順にソート
@articles = sort {$b <=> $a;} @files;

# 明示的なサブルーチン名でソート
sub byage {
    $age{$a} <=> $age{$b}; # 整数であると仮定している
}
@sortedclass = sort byage @class;

sub reverse { $b cmp $a; }
@harry = ('dog','cat','x','Cain','Abel');
@george = ('gone','chased','yz','Punished','Axed');
print sort @harry;
     # 出力は AbelCaincatdogx
print sort reverse @harry;
     # 出力は xdogcatCainAbel
print sort @george, 'to', @harry;
     # 出力は AbelAxedCainPunishedcatchaseddoggonetoxyz

Go to the first, previous, next, last section, table of contents.