日本語 POD が perldoc で読めない
マルチバイトでかかれた(たとえば =encoding utf-8
な日本語)POD を perldoc で表示すると,
XXXXX
みたいになってしまいます(CentOS なり Ubuntu なりで)。
とりあえず読みたい,というのなら,
% perldoc -t Hoge::Nihongo
みたいに nroff コンバータではなくテキストコンバータで読めば読めます。が,強調表示とかされません。ちょいと悲しい。
Pod::Man の含まれる podlators 2.1.0 以降で pod2man コマンドに --utf8
(-u
)オプションというのができて,これを使うと 8bit スルーで nroff に渡してくれるようになりました。
なので pod2man をダイレクトに叩くなら
% pod2man -u `perldoc -l Hoge::Nihongo` | nroff -man | $PAGER
みたくすれば読めます。
perldoc をそのまま使いたいなら……現時点(3.14)の Pod::Perldoc(の下位の Pod::Perldoc::ToMan)だと,--utf8
コマンドを渡せないんです。
なので,MY/ToMan.pm なるファイル*1をつくって
package MY::ToMan; use strict; use warnings; use base qw( Pod::Perldoc::ToMan ); sub utf8 { my $self = shift; $self->{fixed} = 'CW" "--utf8'; } 1;
次のように実行すれば
% perldoc -MMY::ToMan -wutf8 Hoge::Nihongo
いけます。--utf8
オプションの渡しかたが XSS のように無理くり(pod2man 側では引数をとらないオプションなので)ですね。これなら pod2man を使ったほうがいいか。
Bug #39000 for Pod-Perldoc: Support for "pod2man --utf8" な RT もあがってるのでいつか Pod::Perldoc(::ToMan / ::ToNroff) が改善されるかもしれません。
もっといい方法があったらすみません。
2008-10-09 追記: zsh の関数で書いてみた
pod2man を使う方法でエイリアス,もとい function を書いてみました。
function perldoc() { # count options local opt while getopts ":" opt; do; done if [ $# -eq 1 -a $OPTIND -le $# ]; then # single argument was specified local file; file=`command perldoc -l $1` [ $? -eq 0 ] && ( pod2man -u $file | nroff -man | $PAGER ) else # passthru command perldoc $@ fi }
関数かくのはじめてなんで冗長かもですけど。
$PAGER
かましてるけどパイプかまされてたらはずすようにしたいですね。どうするんだろ。
*1:2階層以上のパッケージ名じゃないと怒られるんです。