Perldoc 中有关 perllocale 的错误是什么?

What is this error about perllocale in Perldoc?

我正在讨论 here 关于在 Perl 中设置无区域设置,并且被推荐给 运行 这个 perldoc perllocale 在 OSX Yosemite 10.10.3 但我得到错误:

Error while formatting with Pod::Perldoc::ToMan:

 at /System/Library/Perl/5.18/Pod/Perldoc.pm line 1346.


 at /usr/bin/perldoc5.18 line 11.
Got a 0-length file from /System/Library/Perl/5.18/pods/perllocale.pod via Pod::Perldoc::ToMan!?

 at /usr/bin/perldoc5.18 line 11.

which perldoc 给出 /usr/bin/perldoc 所以应该是正确的。 echo $PATH 给出

/usr/local/bin:/usr/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/texbin:/Users/masi/.cabal/bin 

我注意到有些文件夹在那里有两次,但可能的覆盖不应该是问题的原因。 我的 .bashrc 是空的,但 .profile 只有 export LANG=en_US.UTF-8

这个 Perldoc 错误是什么意思?

我猜测,perllocale.pod 文件应该包含 pod 格式的 perllocale 文档,但它是空的。

您可以在 http://perldoc.perl.org/5.18.2/perllocale.html

在线阅读相同的文档

我在 OSX Yosemite 10.10.3

上遇到了完全相同的错误
bessarabov@bessarabov-osx:~$ perldoc perllocale
Error while formatting with Pod::Perldoc::ToMan:

 at /System/Library/Perl/5.18/Pod/Perldoc.pm line 1346.


 at /usr/bin/perldoc5.18 line 11.
Got a 0-length file from /System/Library/Perl/5.18/pods/perllocale.pod via Pod::Perldoc::ToMan!?

 at /usr/bin/perldoc5.18 line 11.
bessarabov@bessarabov-osx:~$

命令perldoc -l perllocale显示文件的路径:

bessarabov@bessarabov-osx:~$ perldoc -l perllocale
/System/Library/Perl/5.18/pods/perllocale.pod
bessarabov@bessarabov-osx:~$

文件不为空,我已将其保存到https://gist.github.com/bessarabov/20370992150a332dc0f0

OSX Yosemite 10.10.3 有 perldoc 版本 3.19:

bessarabov@bessarabov-osx:~$ perl -MPod::Perldoc -E 'say $Pod::Perldoc::VERSION'
3.19
bessarabov@bessarabov-osx:~$

您可以 运行 PERLDOCDEBUG=5 perldoc perllocale 查看一些调试信息 - 这是日志 https://gist.github.com/bessarabov/6e09b4e491d5a00c6304 但不是很有用。

我试图找出 perldoc 失败的原因。我没有确切的答案,但问题出在文件 /System/Library/Perl/5.18/Pod/Perldoc/ToMan.pm:

中的这部分代码
while( $offset <= $length ) {
    $self->debug( "Writing chunk $chunks\n" ); $chunks++;
    syswrite $writer, ${ $self->{_text_ref} }, $chunk_size, $offset
        or $self->die( $! );
    $offset += $chunk_size;
    ...
}

此循环的几次交互有效,但随后 syswrite 终止,并且 $! 没有关于错误的信息。

我能够使用其他解析器阅读文档:

perldoc -MPod::Perldoc::ToText perllocale

解决此问题的另一种方法是更新到最新版本 Pod::Perldoc — perldoc 3.25 可以很好地处理此文件。