Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2012-06-04

特定のモジュールを require 不可にする

| 01:33 | 特定のモジュールを require 不可にする - NaN days を含むブックマーク はてなブックマーク - 特定のモジュールを require 不可にする - NaN days

CPAN にある一部のモジュールはビルド時に依存モジュールを決定するようになっていて、例えば Any::Moose では Makefile.PL の実行時に require Moose できたら PREREQ_PM に追加する (この辺の仕組みよく知らない) ……となっていますが、carton install するときなど system-wide に Moose が入っちゃってるとアプリケーションでは Mouse を使いたいのに Moose が依存関係に記録されちゃって困るなんてことがあるので lib::but というのを書いたんだけど今見てたら Devel::Hide というのがありました……。これを使うとこんな感じにできる。

% PERL5OPT='-MDevel::Hide=Moose' carton install Any::Moose
Devel::Hide hides Moose.pm
Installing modules from the command line
Devel::Hide hides Moose.pm
Successfully installed Mouse-0.97
Successfully installed Any-Moose-0.18
2 distributions installed
Complete! Modules were installed into local

使わないとこうなる (Moose がインストールされてる場合)。

% carton install Any::Moose            
Installing modules from the command line
Successfully installed Try-Tiny-0.11
Successfully installed Test-Fatal-0.010
Successfully installed Params-Util-1.07
Successfully installed Sub-Install-0.926
Successfully installed ExtUtils-MakeMaker-6.62 (upgraded from 6.57_05)
Successfully installed Data-OptList-0.107
Successfully installed Sub-Exporter-0.982
Successfully installed List-MoreUtils-0.33
Successfully installed Dist-CheckConflicts-0.02
Successfully installed Test-Requires-0.06
Successfully installed Package-DeprecationManager-0.13
Successfully installed Package-Stash-XS-0.25
Successfully installed Task-Weaken-1.04
Successfully installed MRO-Compat-0.11
Successfully installed Package-Stash-0.33
Successfully installed Module-Runtime-0.013
Successfully installed Module-Implementation-0.06
Successfully installed Class-Load-0.19
Successfully installed Class-Load-XS-0.04
Successfully installed Eval-Closure-0.08
Successfully installed Sub-Name-0.05
Successfully installed Devel-GlobalDestruction-0.05
Successfully installed Moose-2.0602
Successfully installed Any-Moose-0.18
24 distributions installed
Complete! Modules were installed into local

-Mlib::but=Moose でも同じ感じ。lib::but いい名前だと思ったんだけどなー……。