「You have an old groff. Update to version 1.20.1 for good Unicode support.」の対応

Macとか FreeBSDPerl 5.16以降を入れて、perldocを使ったとき
以下のようなメッセージが出てしまいました。毎度毎度こんなのが
出てくるのは, うざいのでその対応に関するメモ。

You have an old groff. Update to version 1.20.1 for good Unicode support.
If you don't upgrade, wide characters may come out oddly.

 at /Users/syohei/perl5/perlbrew/perls/perl-5.16.1/lib/5.16.1/Pod/Perldoc.pm line 1346.
You have an old groff. Update to version 1.20.1 for good Unicode support.
If you don't upgrade, wide characters may come out oddly.

 at /Users/syohei/perl5/perlbrew/perls/perl-5.16.1/lib/5.16.1/Pod/Perldoc.pm line 1346.

対応

まず新しい groffをインストールします。home brewだとレシピ(?)を書いてくれている人が
すでにいたのでそれを利用します。FreeBSDだと portsのものは古かったので、最新のソースを
自分でコンパイルしてインストールすればよいかと思います。

% brew install https://raw.github.com/Homebrew/homebrew-dupes/2cdfb74a6bdfef285eb1692073b9634f7b056bcb/groff.rb


これだとまだ以下の画像の用にエスケープシーケンスがそのまま表示されてしまったり
と問題があったので lessのオプション指定で回避することにします。


.bashrcや .zshrcに以下を追加します。

case "$OSTYPE" in
darwin*)
        # Only Perl 5.16 problem??
        export PERLDOC_PAGER='less -f -r'
esac

まともに動く Linux環境で同じオプションをつけると見た目が変になったので
Mac限定としています(FreeBSDは未確認)。エスケープシーケンスの対応の
ための "-r"以外に "-f"オプションをつけているのは、podをバイナリファイルと
勘違いしてしまうことがあり、「バイナリファイルですが開きますか?」と
問い合わせが発生するのがうざかったためです。環境変数 PAGERでなく
PERLDOC_PAGERに設定することで perldocだけで影響をとどめています。


これでとりあえず正しく見れました。

おわりに

本家に報告されているようで、そのうちなおる問題のようです。