#3に引き続き発表してきました。資料
今回自分の発表のあとに出てきた質問について補足したいと思います。
(質問について補足できる場があるといいですね)
mixin(export)って具体的にどうやってるの
まずuseの話から。
useはrequireしたあとに、importメソッドを呼び出す。
use終わり。
useされる側のメソッドをuseした側のパッケージに移植する、という処理は自分でuseされる側のimportメソッドに書けってことです。
でも面倒なので大抵はExporterなどのモジュールで用意されてるimportメソッドを拝借します。
では動作を確認するために、Exporterのimportメソッドを見てみましょう。
Exporterのソース
はい、折れた!今君の心折れたネ!
以下に異なるパッケージにサブルーチンを移植するだけのコード置いときますのでお好きにどうぞ。
ここ
実行すると、mainって表示されますね。
mainにはexport_methodなんて定義してないのにmainのメソッドとして呼べているのがわかります。
MyExport.pmもimport文は2行。
callerで自分を呼び出した側の名前を取得して、
グロブを使って相手のパッケージにサブルーチンを登録しています。(エイリアス)
さて、グロブって何だよ死ねって思われたかもしれないですが、そこはperldocに譲りたいと思います。
http://perldoc.jp/docs/perl/5.8.8/perlmod.pod
使わなくなったモジュールを消したい
本当に使わなくなったかどうかを確認したいってことだと思うのですが、
無理☆という結論に。
使用されるモジュールというのは動的に決定されるので、すべてのケースを網羅したテストがあると可能ですが、じゃぁそのテストが完璧だっていうのはどうやって検証するのっていう、、、、。
動的な言語では全部無理じゃないかなぁ。
また根本的な話だと、使わなくなったモジュールを完璧に排除する必要は無いな、と思います。
動的なんで、ホントに使ってないならロードもされないですから。
(使ってない=useしてない、 排除=ライブラリソース自体置かない)