plenvやperlbrew等できれいなperl環境を利用している際に,Perl::Critic (例えばエディッタのsyntax checkingに引っ掛けているようなシチュエーション) やLなどの自分の環境でだけ動かすようなモジュールを環境グローバルに入れたくないという場合が生きているとあるでしょう.かと言って複数人で開発していてcpanfileをrepositoryで管理しているようなプロジェクトだとcarton/carmelでインストールするというのも微妙.そういう時にどうするか,と言う時の話です.
僕は雑な人間なので,そういったモジュールを利用したい時は普通にcpanm L
とかやってしまいがちなんですが (なんと前提が崩れた),真面目にやるときはdirenvを使ってPERL5OPT
を設定するようにしています.
例えば
$ cpanm -l mydist L
という風に,-l
オプションとともに任意のディレクトリの以下にモジュールをインストールしておいて,
export PERL5OPT="$PERL5OPT -I/path/to/mydist/lib/perl5"
みたいな感じで-I
オプションによってincludeするパスを指定したPERL5OPT
を.envrc
に書き込んでやる.この時指定するパスは,モジュールをインストールした先のパスを指定する.
そうすると,.envrc
が置かれているディレクトリ以下ではこのPERL5OPT
が有効になるので,-l
オプションと共にインストールしたモジュールが実行時にincludeされ (PERL5OPT
の-I
に指定したディレクトリ以下が走査される),自動的に利用可能になります.
注意としては,PERL5OPT
に書く-I
オプションに与えるパスはフルパスである必要があるということです.これが相対パスだとincludeするパスの位置の決定がperlを実行するディレクトリに依存してしまい正しく動作しなくなります.
これできれいな環境を保ちながら任意のモジュールを任意の場所にインストールしつつ,自分の環境でだけ有効にすることができる.やりましたね.