なにも考えずにportupgrade -Rraやったら(←いけません)portsでインストールされていたperlモジュールのの更新がボロボロ失敗する。なぜかと思ったらperlが5.8.8→5.8.9に更新されていて、モジュールのインストールパスが変わっていたからでした。
モジュールAがモジュールBに依存していてAが更新されていた場合、
- Aのmake中に依存しているBのファイルを探す。perlはすでに更新されているので/usr/local/lib/perl5/site_perlを見る→当然無い
- Bがインストールされていないと判断してインストールしようとする
- しかしBはすでにインストールなので失敗
- 依存するモジュールのインストールに失敗したのでAも失敗
と。
UPDATINGに書いてあるとおり、perlを更新した後に一緒にインストールされるperl-after-upgradeってスクリプトを走らせると、関連ファイルをごっそり移動して/var/db/pkgの情報も書き換えてくれるようです。もしくは/usr/local/lib/perl5/site_perl/5.8.8にファイルを置くportsを全部portupgrade -f するか。
教訓:UPDATING読め