スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
map と grep をマスターしたあたなに
mapgrep をマスターしたあなたなら、

つぎの配列から、.txt だけをとりだすことなんて容易なはずです。
my @array = ('aaaa.txt', 'bbbb.txt', 'aaaa.xls', 'bbbbb.xls',
             'cccc.doc', 'cccc.txt');


こうなりますね。
my @txts = grep { $_ =~ /.txt/ } @array;


それでは、 @txts の各々の要素に、YYYYMMDD_  という文字列を付けて、
@today_texts に受け取りましょう。 map を使えばできますね。
my @today_texts = map { 'YYYYMMDD_' . $_ } @txts;


さて、いままでのところのソースを全部書くと、
use strict;

my @array = ('aaaa.txt', 'bbbb.txt', 'aaaa.xls', 'bbbbb.xls',
             'cccc.doc', 'cccc.txt');

my @txts       = grep { $_ =~ /.txt/ } @array;
my @today_texts = map { 'YYYYMMDD_' . $_ } @txts;

となります。
最終的に欲しいのは、@today_texts です。
@txts は一時的な加工結果を入れておきたいがために用意したものです。
@txtsは、もうこのソースの他のところでは使わないとしましょう。
そうすると、@txts という名前を考えた時間も脳細胞ももったいないと思いませんか?
そうです、@txts なんて、用意しなくてもいいのです。

use strict;

my @array = ('aaaa.txt', 'bbbb.txt', 'aaaa.xls', 'bbbbb.xls',
             'cccc.doc', 'cccc.txt');

my @today_texts = map { 'YYYYMMDD_' . $_ } grep { $_ =~ /.txt/ } @array;

↑こう、書いてしまえばいいのです。
1行で書けましたし、@txts なんて余分なものはいりません!!

「ど、どういうことだ??」
と思うかもしれません。じっくり考えてみましょう。

map {処理} @配列
grep {処理} @配列

という書式はバッチリ頭に入ってますね。
だったら簡単ですよ~。
まず、grepの部分が処理されます。
そうです、「grep { $_ =~ /.txt/ } @array」の部分が処理されるのです。

grepは配列を返しますよね、
そのgrepが返した配列を今度はmapでもらっているという寸法なんです。
こうやって、 「map { } grep { } map { } map { } @配列」 なんて形で、
どんどん mapとgrepは繋げられるんです。
このとき後ろからどんどん評価されていることを忘れないでください。

こうやって、あなたのソースから一時的にしか使用してない変数をどんどん削除して、壮快で読みやすいソースを目指してください。 
スポンサーサイト
-
承認待ちコメント
このコメントは管理者の承認待ちです
2011/06/06 (月) 21:02:50| |#
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。