mapとgrep

偉そうにperl使いを自称していたが,実はmapとgrepを使いこなせていなかった.
(全部foreachで書いてた)

なんとなく納得できなかったが,今日トイレの中でリャマ本を眺めていたらとっても簡単なことを理解.

  • grep
    • 条件式にマッチした要素を含むリストを生成する
my @bigger_numbers = { $_ > 50} 1..100;    # 1-100の中から50より大きい数字のリストを返す
my @matching_lines = { /perl/ } ;      # ファイルハンドラの中からperlを含む行を抜き出したリストを返す
  • map
    • 条件式にマッチした要素の,条件式における最後の式の評価のリストを返す
my @bigger_numbers = { $_ > 5} 1..10;    # 1-10の中から5より大きい数字のリストを返す?
print "@bigger_numbers\n";               # => 1 1 1 1 1
                                         # 条件式の結果は1(true)を返しているので,その値がリスト要素として返される

my @new_list = { double_value($_) } @list; # このようにサブルーチンに渡した結果のリストを作ることができる