Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 標準関数
  3. here

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の「配列」についての解説は以下をご覧ください。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。