Time::Piece 1.21 から install される場所が変わって嵌ったりした。
Time::Piece が古いと localtime 事件みたいのがあるから cpanfile に
requires 'Time::Piece', '>= 1.20';
このように新目の version を指定しておくことがあるかもしれない。ただ、これが
requires 'Time::Piece', '== 1.20';
になっていて、かつ carton ではない時に ( carton の場合は調べてない ) 何かの拍子に 1.21 移行のものが入ってしまっていて嵌った。
説明
1.21 移行は Makefile.PL が変わっていて
'INSTALLDIRS' => ( ($] >= 5.009005 and $] < 5.011) ? 'perl' : 'site'),
となっている。つまり新し目の perl だと site 以下に入る。しかし 1.20 以下では
'INSTALLDIRS' => ( $] >= 5.009005 ? 'perl' : 'site' ),
となっている。つまり新し目の perl だと perl 以下にはいる。
- http://cpansearch.perl.org/src/MSERGEANT/Time-Piece-1.20/Makefile.PL
- http://cpansearch.perl.org/src/RJBS/Time-Piece-1.22/Makefile.PL
なので、== 1.20
を cpanfile で期待している状態で 1.21 移行が入っていると site 以下が優先的に見られるので、perl 以下に 1.20 が入っているとしても == 1.20
を満たせず cpanm が失敗してしまう。
まとめ
== 1.20
なんてやめよう