Hatena::Diary

TokuLog 改めB日記 このページをアンテナに追加 RSSフィード

[][][]ディレクトリ内のファイルをもりもりとる方法

あたりをみて、自分のお気に入りのモジュールで適当にダンプするプログラム書いてみたよ。おぶじぇくとしこうぷろぐらまははっしゅじゃなくておぶじぇくとのはいれつをかえすべきなんじゃまいか!ということで、Path::Class::File のインスタンスがもりもり返ってくるよ!

あと、JSON::Syck とか JSON の判別をするのはまんどいからtypsterさんにむかつかれていることで有名な JSON::Any を使ったよ!

map { } @foo とかかくとダサいから autobox を使ったよ!autobox 使うと []->map(sub { }) ってかけて ruby っぽいよ!autobox は VM の undocumented なフックポイントではないところに無理やり実行時にフックしているお行儀のいいライブラリだから、みんな使ったらいいと思うよ!

use Data::Dumper;
use JSON::Any;
use Path::Class;
use autobox::Core;
use autobox;
use boolean ':all';
use strict;
use warnings;

&main;

sub main {
    die "Usage: $0 dir" if @ARGV != 1;
    my $dir = shift @ARGV;
    print Dumper(dump_tree(dir($dir), false)), "\n";
    print JSON::Any->objToJson(dump_tree(dir($dir), true)), "\n";
}

sub dump_tree {
    my ($dir, $stringify_p) = @_;

    return [ $dir->children ]->map(
        sub {
            my $f = shift;
            if ( $f->is_dir ) {
                dump_tree($f, $stringify_p);
            }
            else {
                $stringify_p ? $f->stringify : $f;
            }
        }
    );
}

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tokuhirom/20071108/1194486573