9

如果这是不可能的,那么处理从 UTF-8 编码的 POD 派生的手册页的最佳做法是什么?

为了在 POD 中使用 Unicode,首先要做的是使用指令

=encoding UTF-8

(如此处所讨论。和工具可以正常工作pod2textpod2html产生完美的 UTF-8 编码输出。

但是,该pod2man工具不会:

pod2man -u MyModule.pm | nroff -Tutf8 -man | less

也没有perldoc。非 ASCII 字符全部被损坏或 X-ed。关于 perlbug 是否可能是**roff*中的错误,存在一些不确定的讨论。pod2man

由于我的模块专门处理 Unicode 并打算在 CPAN 上分发,因此启用 Unicode 的手册页是必须的。

我正在使用 Perl 5.14.2、perldoc 3.15 和 *roff 1.21。

4

2 回答 2

3

你很幸运! 这个错误似乎已在 Pod::Perldoc 3.16 中修复。所以只需更新 Pod::Perldoc,问题就解决了一半。

但是,pod2man 来自不同的发行版,是完全不同的代码库。对于 UTF-8,它仍然被破坏。不幸的是,Perl 安装程序使用它来生成手册页。

于 2012-10-27T06:03:42.760 回答
2

所有perldoc, pod2man,nroff都可以正确处理 Unicode UTF-8 字符。不幸的是,诸如 Build.PL 和cpan程序之类的 Perl 安装程序还不能。因此,除非您在安装过程中手动进行一些摆弄,否则安装的手册页将被破坏。

对于我的最小示例,这些都可以正常工作:

perldoc lib/MyModule.pm        # works as of 3.16 (@Schwern)
perldoc -t lib/MyModule.pm     # display with pod2text
pod2man -u lib/MyModule.pm     # produces UTF-8 man page
pod2man -u lib/MyModule.pm | nroff -Tutf8 -man - -Kutf8 | less

nroff仅当您将输入编码 ( -K) 也传递给groff ( source ) 时才有效;-您必须使用选项结束开关来保护它。

这很好。但是,大多数用户都希望安装文档,然后使用man MyModule或进行查阅perldoc MyModule。在 的情况下perldoc,您的选择是使用最新版本 (3.16) 或-tswitch。

在 的情况下man,如果您使用 Build.PL (Module::Build) 安装模块,您可以在安装之前修复损坏的生成文档:

perl Build.PL
./Build
# now overwrite the broken man pages:
pod2man -u -s 3pm lib/MyModule.pm blib/libdoc/MyModule.3pm
./Build install

迷人的!现在您可以使用man MyModule.

如果您使用cpan安装模块,您的手册页将被破坏。(您可以在本地 CPAN 构建目录上尝试相同的解决方法,例如~/.cpan/build,这也应该可以。)

于 2012-10-27T12:09:53.027 回答