grep関数 - 特定の条件を満たす配列要素のみ取得
「grep関数」を使用すると配列の中で条件にマッチした要素のみを取り出すことができます。デフォルト引数$_に@arrayの各要素が渡されてきます。条件文を満たした要素のみが@matchedに追加されます。
# 条件にマッチした要素のみを取り出す @matched = grep { 条件文 } @array;
サンプル
正規表現にマッチした要素のみを取得するサンプルです。このサンプルでは整数だけを取り出しています。@numsが(1.23, 123, 43)の場合は@matchedは(123, 43)になります。
# 正規表現にマッチした要素のみを取得 my @nums = (1.23, 123, 43); my @matched = grep { /^\d+$/ } @nums;
正規表現でパターンマッチ演算子(=~)を省略するとデフォルト変数$_がパターンマッチの対象になります。上のサンプルは次と同じ意味です。
# デフォルト変数$_を明示的に指定 my @matched = grep { $_ =~ /^\d+$/ } @nums;
2の倍数のみを取得するサンプルです。@numsが(1, 2, 3, 4)の場合は@evenは(2, 4)になります。
# 2の倍数のみを取得 my @nums = (1, 2, 3, 4); my @even = grep { $_ % 2 == 0 } @nums;
grepを使用した処理はforeach文を使用して書くことができます。grepのほうが簡潔に書くことができるのでPerlではgrepがよく使用されます。
# for my @nums = (1.23, 123, 43); my @matched; for my $num (@nums) { push @matched, $num if $num =~ /^\d+$/; }
参考「Perlの配列」
Perlの「配列」についての解説は以下をご覧ください。