masatoの日記

やっていきます

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.";
}