tokuhirom's Blog

Shipped File::Zglob 0.01

http://github.com/tokuhirom/File-Zglob

File::Find::Rule とかまあ結構なんですけども、

File::Find::Rule->file->in('lib')->name('*.pm')

っていうフォームはなかなかぱっと思いだしづらいです。ユーザーフレンドリーじゃないんですね。

シェルだったら lib/**/*.pm ってうったらいっぱつででてくるじゃないですか。そういう風にうちたいですよ。

というわけでつくってみました。 File::Zglob です。

use File::Zglob;
my @files = zglob("lib/**/*.pm");

という風にうつだけでいいんです。このインターフェースならわすれないでしょう。shell で普段からうってますものね。

ちょっとしたスクリプトとかで超便利だとおもうので、ぜひつかってみてください。

【速度】
PP で実装されている関係上、glob や bsd_glob より遅いですが高機能でカジュアルにつかえるので問題ないかとおもいます。File::Find::Rule よりは速いですし。

【余談】
gauche の sys-glob を移植しています。そのおかげでコードがやたら関数型っぽくなってしまっていますがそのうち整形してもいいかなとおもっています。

【余談2】
このモジュールつくりたいとおもってからかれこれ3年ぐらいたってしまいました。赤坂ツインタワーの地下でかずほさんがこういうのあったらいいねーっていう話をしていたのがきっかけでつくりたいとおもってた気がするのでほんとにだいぶ前です。

だいぶねかせてたわりに3日ぐらいでできあがりました。一番時間がかかったのは gauche の関数名をググる作業です。

【余談3】
最初はPerl本体にくみこもうとおもってたんですが、いかんせん本体のコードは OpenBSD 由来の C コードなのでいじりづらかったんですね。どうやったら ** の処理とかきっちりできるのかは把握したので今ならできるとおもいます。

Perl のコードになったおかげで内容が把握しやすくなったので本体の方にとりこんでもらうのはわりと誰でも簡単に挑戦できる気はしますけど。