@kyanny's blog

My life. Opinions are my own.

Test::Simple を手動で make install するとヘンなパスにインストールされてしまう?

例によってうまく説明できない。

Test::Simple ディストリビューションに依存しているモジュールを入れたいとして(例えば Test::Warn)、 Test::Simple はコアモジュールなのでインストール済みではあるんだけどバージョンが古かったりする。なので先に Test::Simple を手動でインストールして、改めて Test::Warn をインストールしようとすると「Test::Simple (今回は Test::Builder::Tester) が古い」と怒られてしまう。

でも Test::Simple はちゃんと要件を満たしているバージョンがインストール済みなので、当然もう一度インストールを試みても何も変化しない。つまり Test::Warn はインストールできない(もちろん make test しなければインストールはできる)。

これ少し前にもなったことがあって、そのときも Test::Builder::Tester だったような気がする。そのときは Makefile を読んで make install じゃなくて別のターゲットでインストールしたら直ったような気がするけど、原因がよくわかってないのでどうも気持ち悪い(上に、やり方忘れてしまったのでこうやって二度はまる)。

perldoc -l の結果などをみるに、コアモジュールで入ってるほうなのか、コアではないけど元々インストール済みだったのか、とにかく古いバージョンのほうが先にヒットしてしまって(ロードパス的に前にあるんだろう)、せっかく入れた新しいバージョンがいつまでたっても見えない、ということだったような。なんでこんな面倒くさいことになっているんだろう、普通に上書きして使えるようにしてくれりゃいいのになあ。 local::lib 使ったりとかはしてないです。

それにしても、 CPAN モジュールの自由奔放さは、 cpan コマンドを使えなくなるととたんに牙をむく。 Test::Warn なんて zip でアーカイブされてるし、 Class::Accessor::* みたいなのの微妙に違うものもたくさんありすぎる。