Perl製ツールを非Perlerに配布するとき

lib::core::only とか使うわけですけど、これの中身は4行で書けるのでそれでもいいと思います。

# does the same as lib::core::only to prevent to use locally-installed modules
BEGIN {
    require Config;
    @INC = @Config::Config{qw(privlibexp archlibexp)};
}

追記: いろいろ考えた挙句こうなりました

  • CPANモジュールは使いたいのでextlibにpure Perlのモジュールを突っ込んでいる
  • リリースした後うっかりextlibに含まれないモジュールを使っていることが発覚というのはクラッシュするコマンドをリリースするのと同義だから避けたい
  • よって リリース前は lib::core::only を有効にした状態でテストしたい
  • リリース前のテストでは extlib にインストールされたXSモジュールをロードしないようにしたい
  • ローカルにJSON::XSがインスコされている場合はそれを使いたい
if ($ENV{IN_RELENG}) {
    # does the same as lib::core::only
    # to prevent to use locally-installed modules
    require Config;
    @INC = @Config::Config{qw(privlibexp archlibexp)};
    # do not use lib module; we don't want to use XS modules
    unshift @INC, "$DIR/../extlib/lib/perl5";
}
else {
    require lib;
    lib->import("$DIR/../extlib/lib/perl5");
}

例としては JSX compiler frontend など。