tokuhirom's Blog

Exporter::Auto ってのつくってみたよ

https://github.com/tokuhirom/Exporter-Auto
なんか @EXPORT にいれるのだるくね! このプロジェクトでしかつかわないから全部 export しちゃってくれていいですよ!
みたいなやつ。ありませんか? ありませんか。そうですか。そうなら、ブラウザの「戻る」ボタンを押してください。ってところまでかいてから気付きましたが、最近のブラウザって「戻る」ってかいてありませんね。はい。

で、概要ですが、Sub::Identify + B::Hooks::EndOfScope という荒技で、パブリックっぽいメソッドの一覧をみつけて @EXPORT にぶっこむというイカした技です。
Exporeter::Auto->import がよばれる時点、つまり use Exporter::Auto の時点ではまだメソッドが実際に定義されていないので、B::Hooks::EndOfScope をつかって、スコープをぬけるタイミングでメソッドの検出をおこなっているところがシャレオツだといえるかとおもいます。

Sub::Identify をつかうことによって use File::Spec::Functions などで、他のパッケージから輸入されてきたものは Export しないようになっているのもなかなかいいかんじですね。

まあこのモジュール自体は、実用的ではないかもしれませんが、そういうかんじのハックをしたいときはこういうモジュールつかったらいいですよ、という程度のものです。