grepを使ってリストにマッチする要素が含まれるかを判定する
ループの代わりにgrepすると簡潔に書ける。
人の名前がはいったリストがあるとして、その中にFredさんがいるかどうかを確かめたい。
forループならこう書ける。
for my $person ( @people ) { next unless $person =~ /Fred/; $flag = 1; last; }
grepを使うと1行だ。
my $ret = grep { /Fred/ } @people;
結果のプリントを含めたサンプルコード。
use strict; use warnings; use 5.0100001; my @people = qw/ Jeff Masato Koji /; ## forループを使った場合 my $flag; for my $person ( @people ) { next unless $person =~ /Fred/; $flag = 1; last; } if ($flag) { say $flag; } else { say "Fred doesn't seem to be here." } ## grep演算子を使った場合 my $ret = grep { /Fred/ } @people; if ($ret) { say "Hi, Fred."; } else { say "Fred isn't here."; }