■[perl][dankogai][neta]ディレクトリ内のファイルをもりもりとる方法
- http://d.hatena.ne.jp/amachang/20071107/1194419207
- http://blog.livedoor.jp/dankogai/archives/50946816.html
あたりをみて、自分のお気に入りのモジュールで適当にダンプするプログラム書いてみたよ。おぶじぇくとしこうぷろぐらまははっしゅじゃなくておぶじぇくとのはいれつをかえすべきなんじゃまいか!ということで、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


