grepとmapの使い分け

「Effective Perl」でgrepとmapの使い分けについて学んだので簡単な纏めです。

#!/usr/bin/perl
use strict;
use warnings;

chomp (my @list = `ls *.txt`);

# 元の要素から抽出したものだけのリスト
my @grepped = grep { /(.*)\.txt$/ } @list;
print join ",", @grepped, "\n";

# 元の要素のコピーから加工した別のリスト
my @mapped = map { /(.*)\.txt$/ } @list;
print join ",", @mapped, "\n";

# 元の要素自体を編集してしまう場合はfor/foreachを使うべき
s/\.txt/\.log/g for @list;
print join ",", @list, "\n";

実行結果

foo.txt,hoge.txt,var.txt,
foo,hoge,var,
foo.log,hoge.log,var.log,

「Effective Perl」は「初めてのPerl」「続・初めてのPerl」で一通り基礎的な事を学んだあと「じゃ、実際どういうときにどう使うんだろう」っていう段階にはピッタリな良著だと思います(まさに序章にあるように「赤ちゃん言葉(baby talk)」の段階を脱するのに最適な)。

[rakuten:book:10759860:detail]