微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pod::Usage: `=begin :text`/`=end :text` 弄乱了格式

如何解决Pod::Usage: `=begin :text`/`=end :text` 弄乱了格式

我有一些 POD 文档,其中的一个部分应该在 Latex(使用 pod2latex)和纯文本/人中以不同方式呈现。为此,我有一个 =begin :text/=end :text 部分。

现在,我想在命令行上显示 POD 的各个部分(使用 Pod::Usage)。这就是问题所在:在这种模式下,:text之后的所有部分都出现乱码。

这是一个最小的例子:

pod2usage(-verbose => 99,-sections => 'Two');

=head1 One

=begin text

For I<non-Latex> only.

=end text

=head1 Two

C<Formatting> all I<messed> up!

输出

Two:
"Formatting"*messed*     all up!

请注意,打印整个 POD(pod2usage(-verbose => 2); 或仅在文件上运行 perldoc)工作正常。

我已经尝试了我能找到的所有 Pod::Usage 选项(包括选择不同的 Formatter 类),但现在有用。如果我从块中删除 :text(普通 =begin/=end),它会与部分选择一起出现,但这实际上是一个 POD 语法错误,并且 {{1 }} 在渲染整个 POD 时抱怨它。

注意:我的 Perl 很旧(v5.18.2),但我坚持使用那个版本。

解决方法

这看起来像是 Pod::Usage 中的错误。我通过查看源代码找到了一种解决方法。由于缺少子 Pod::Simplecmd_for 的内部堆栈似乎混乱了。通过手动添加虚拟子 cmd_for 似乎可以工作:

use feature qw(say);
use strict;
use warnings;

use Pod::Usage;
{
    no warnings 'once';
    *Pod::Usage::cmd_for = sub { };
}

pod2usage(-verbose => 99,-sections => 'Two');

=head1 One

=begin text

For I<non-Latex> only.

=end text

=head1 Two

C<Formatting> all I<messed> up!

输出

Two:
    "Formatting" all messed up!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。