おそらくはそれさえも平凡な日々

最近のPerlのExporter事情とかExporter::Liteとか

結論

  • use Exporter 'import' で充分

説明

今のはてなでは割と標準的にExporter::Liteが使われている。Liteの方があんま余計なことしないからとは聞いてはいたが、それで依存増やすのもどうなのかなーとか思っていたので個人的にはこれまでExporterしか使ってなかった。Exporterは標準モジュールだし。Exporterにしてもuse parent 'Exporter'なのかuse Exporter 'import'なのかという流儀の違いがあって、個人的にはuse parent 'Exporter'を使っていた。その辺りについて再考した。

ExporterかExporter::Liteか

もうあまりExporter::Liteを使う理由はないように感じる。

Exporterの最近のソースを読むと、かなりシンプルになっていることがわかる。

Exporterの複雑な機構は、Exporeter::Heavyというパッケージに追い出されていて、複雑な機能を使おうとするとそちらが遅延ロードされるようになっていて普段は使われない。

@EXPORT@EXPORT_OKだけを使って、関数のみをエクスポートするだけであれば、Exporter::Lite以上にシンプル。例えばExporter::Liteはパッケージ変数のエクスポート機構とかがあるが、Exporter単体ではその処理はHeavyの方に書いてあるし、そういう機構はほとんどの場合必要ない。

なので標準的なユースケースではExporterの方がむしろ軽量なのでExporterを使うと良い。

use Exporter 'import'なのかuse parent 'Exporter'か

これはuse Exporter 'import'で充分である。

以前use Exporter 'import'だと変なことがあるとか聞いていて保守的にuse parentしてたが、単に継承しないとexport_to_levelとかが使えないとかそれくらいの話っぽいので、標準的なユースケースでは問題にならない。そもそもExporterを継承する必要はあまりない。

以下でもそんな話が出ている。Export::Tinyというものがあるのを知ったが(ry

http://stackoverflow.com/questions/20765072/use-parent-exporter-vs-use-exporter-import

結論

先頭に戻る。

created at
last modified at

2014-11-21T17:13:44+0900

comments powered by Disqus