Perl のモジュールローダー選定委員会

モジュールローダがいくつもあってよくわからんという話が twitter にかいてあったので、俺の選定基準をまとめてみた。

候補

Module::Load

perl 5.10+ で標準添付。癖もないので、基本的にはこれでいい。

UNIVERSAL::require

$module->require() or die $@ ってかけるのが cool という話ではあるのだが、UNIVERSAL をつかうのに抵抗があるかもしれない。
そして、Module::Load にたいする優位性はとくにないので、最近はあまりつかってない。

Class::Load

上記2つにくらべると、機能がおおい。これは Moose から派生したパッケージで、Moose の is_class_loaded 相当の機能もそなえている。

Moose 由来ということで、%INC の中にはいっていなくても、package がすでにつかわれていれば、ファイルをよみにいかないという点がすぐれている。具体的には

package Foo;
sub bar { }

package main;
use Class::Load qw/load_class/;

load_class('Foo');

がエラーにならない。

これはたとえば、DBIx::Skinny などで、スキーマ定義とスクリプト本体を1ファイルにかいておきたいときなどにつかえる。
なので、最近のバージョンの DBIx::Skinny では Class::Load を採用している。