導入
配列を並べ替える sort、逆順にする reverse、文字列と配列を行き来する join / split。テキスト処理でとにかくよく使う4つです。
説明
sort は既定では文字列順に並べます。数値順にしたいときは sort { $a <=> $b } と比較ブロックを付けます($a と $b が比べる2要素、<=> は数値比較の演算子)。
use strict;
use warnings;
my @nums = (10, 2, 33, 4);
my @by_str = sort @nums; # 文字列順: 10 2 33 4
my @by_num = sort { $a <=> $b } @nums; # 数値順: 2 4 10 33
print "@by_str\n";
print "@by_num\n";
print join(",", reverse @by_num), "\n"; # 33,10,4,2
join(区切り, リスト) はリストを1つの文字列につなぎ、split /区切り/, 文字列 は文字列を配列に分解します。
use strict;
use warnings;
my $csv = "apple,banana,cherry";
my @items = split /,/, $csv; # カンマで分解
print "2つ目: $items[1]\n"; # banana
my $joined = join(" / ", @items);
print "$joined\n"; # apple / banana / cherry
やってみよう
sort に比較ブロックを付けたり外したりして、文字列順と数値順の違いを確かめましょう。split の区切りを変えてみてください。
演習
my @n = (5, 3, 9, 1, 7); を数値順に並べ替え、join(",", ...) でカンマ区切りにして表示してください(結果は 1,3,5,7,9)。
ヒント1を見る
my @sorted = sort { $a <=> $b } @n; のあと print join(",", @sorted), "\n";。