perl 関数 sort

#スペース文字で区切った数値リストを整列する

print "要素をスペース文字で区切った数値のリストを入力してください>";
$numbers = <STDIN>;
chomp($numbers);

#ソートして表示
print join(", ", sort{$a <=> $b} (split(/\s+/, $numbers))),"\n";

#実行結果
# 要素をスペース文字で区切った数値のリストを入力してください>4 2 1 5 3
# 1, 2, 3, 4, 5

#補足
# 数字を数として比較してソートするには

#     sort BLOCK LIST

# という形式を使う。
# BLOCKの部分が {$a <=> $b}
# LISTの部分が@array
# に相当する。

# BLOCKの部分にはリストの要素を比較するためのプログラムの断片を書く。
# この中で、比較する要素は特別に$aおよび$bと書かなければならない。BLOCKの中の式の値に応じて並べ替える。すなわち、
    
#     負になる場合、$aは$bよりも前
#     0になる場合、$aは$bと等しい
#     正になる場合、$aは$bよりも後

# というルールになっている。

# スペースシップ演算子<=>は

#     式1 <=> 式2

# のようにして使い、

#     式1 < 式2 なら -1
#     式1 = 式2 なら  0
#     式1 > 式2 なら  1

# という値を取る演算子であり、sortのBLOCKの部分で使うことが想定されている演算子と言える。

初めてのPerl 第6版

初めてのPerl 第6版