perlのgrep関数の使い方|変数とか戻り値とか複数条件とかのまとめ

perlのgrep関数について学んだので、備忘録としてまとめておきます。

grep関数の基本的なことについて

grep関数は、第一引数に条件、第2引数にリスト(配列)を指定して使う関数。説明するよりも、下記のサンプルコードを見た方が早い。

use Data::Printer;

my @array = ( 1, 4, 5, 6 );

my @result = grep( $_ % 2 == 0, @array );

p @result;

=result
[
    [0] 4,
    [1] 6
]
=cut

上記のコードでは、@array配列の要素の内、$_ % 2 == 0の条件に当てはまる要素を取り出して新たなリストを作り、その新たなリストを戻り値として返している。(今回は戻り値の格納場所を配列@resultとしているが、スカラー変数$resultにすると、@resultの要素の数を返してくれる)

(注:コード内に出てくる$_は、リスト(配列)の要素の1つが格納される変数。grepの他にもforとかmap関数等の様に、リストの要素を1つずつ取り出す処理を行う時によく使う)

grepと言う名前の関数だが、必ずしも正規表現である必要はない。

grep関数で複数条件を指定してあげたい場合。

grep関数に複数条件を指定してあげたい場合は、単純に&&演算子を使えばいける。

use Data::Printer;

my @array = ( 1, 4, 5, 6 );

my @result = grep( $_ % 2 == 0 && $_ == 4, @array );

p @result;

=result
[
    [0] 4
]
=cut

上記のコードは例として悪いけど、正常に処理されているのが分かる。

さらに複雑な処理を書きたい場合は、以下の様に書くと良い。

@result = grep {
  複雑な条件文
} @array;

上記の様にブロックを渡すことで、ブロック内の条件に該当した要素を集めたリストを返してくれる。

詳しくは、下記の公式ドキュメントを見てね。

参考:Perlの組み込み関数 grep の翻訳 - perldoc.jp