mapとgrep(Perl入学式2013-第5回より)

おつかれさまです!(誰にともなく)

Perl入学式の復習シリーズ、昨日に続き、2013年度第5回のvol.2です。
昨日の記事はこちら。
Mojoliciousのインストール(Perl入学式2013-第5回より) - draft

ちなみに、そこでようやく触れることのできたMojoliciousについて、その後、てつじさんによるMojoliciousアドベントカレンダーの投稿にて、まさに僕のような人にうってつけの記事が上がっていました。
Perl - Mojoliciousでわからない事があったらどこで聞けばいい? - Qiita [キータ]

大変ありがたい内容で、とりあえずさっそくLingrルームに参加しました。
Mojoliciousの話題を日本語で – Lingr

では、今日の内容です。記事タイトルにもしましたが、これまでのPerl入学式では触れていなかった補足的な面もかねて、「mapとgrep」について。
https://github.com/perl-entrance-org/workshop-2013-05/blob/master/slide.md#map-%E3%81%A8-grep

資料の方で、ザーッと説明があった後に、練習問題があったので解いてみました。
https://github.com/perl-entrance-org/workshop-2013-05/blob/master/slide.md#%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C

my @files = qw/papix.pl moznion.pm macopy.py boolfool.vim/;

上記の配列を引数にして, 拡張子の後ろに .bak を付け足す map_bak 関数と, 末尾(拡張子)が pl, pm であるものを抜き出す grep_pl_and_pm を作成してください

ということで、まず「map_bak」の方はこんな感じでしょうか・・よっと。

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

my @files = qw/papix.pl moznion.pm macopy.py boolfool.vim/;
sub map_bak {
	my @files2 = map $_.".bak", @files;
    print "@files2\n";
}
map_bak();

実行すると・・

papix.pl.bak moznion.pm.bak macopy.py.bak boolfool.vim.bak

はい。続けて、grepの方はこんな感じで。

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

my @files = qw/papix.pl moznion.pm macopy.py boolfool.vim/;
sub grep_pl_and_pm {
	my @files2 = grep $_ =~ /(.+)\.p[ml]/, @files;
    print "@files2\n";
}
grep_pl_and_pm();

実行!

papix.pl moznion.pm

はい。ええ、grepの方はちょっと、10分ぐらい考え込んだ気がしますが・・どうでしょうか。

で、資料の方では、そのまま「while文」によるくり返しと、「next」「last」「後置if」「後置for」の解説が続き、その後に、例の(というか)「calc_string.pl」の練習問題へ入ります。
で、その問題に関する回答等は以下で書きました。
Perl入学式in東京第5回練習問題よりcalc_string.pl - draft

ということで、今日はここまでとしまして、次回からはその続きである「package/名前空間」「モジュール」「テスト」といった題目へ入って行きたいと思います。
いよいよ何だか本格的ですが・・

packageやモジュールの辺り、YAPC::Asia2013で購入後ず〜っと拝読しています『雅なPerl入門』でも、終盤の方で扱われている内容と重なりつつあるような気がしますが、ちょうどこの辺りを最近何度か読み返しているところなので、そちらとも合わせて、がっつり取り組んでいきたいと思っています。(ぶつかり稽古の伏線的な意味合いで)
#『雅なPerl入門』はこちらをご参照→Clicl!

あとはテスト関連だと、tokuhiromさんのKindle本やmoznionさんの最近めのブログ記事など、予習しておいた方がいいかもしれませんね・・よい機会なのでその辺も恐れずぶつかっていきたいと思います。