【发布时间】:2009-10-05 05:15:40
【问题描述】:
我有一个 POD 文档。现在,我想将该 POD 转换为已解析的部分,如用法/描述,并将其放入字符串中。
为什么不pod2usage?
这并不能帮助我获取字符串中的输出,而是获取 STDOUT/文件中的输出。我强调“以字符串形式获取它”这一点,因为如果长度超过屏幕长度,我想在“页面”中显示 POD。 pod2usage 不会在页面中打印它们:(
谁能告诉我使用哪个模块来实现这个目的?
【问题讨论】:
我有一个 POD 文档。现在,我想将该 POD 转换为已解析的部分,如用法/描述,并将其放入字符串中。
为什么不pod2usage?
这并不能帮助我获取字符串中的输出,而是获取 STDOUT/文件中的输出。我强调“以字符串形式获取它”这一点,因为如果长度超过屏幕长度,我想在“页面”中显示 POD。 pod2usage 不会在页面中打印它们:(
谁能告诉我使用哪个模块来实现这个目的?
【问题讨论】:
Pod::Usage,在 pod2usage 手册页底部引用。
【讨论】:
来自Pod::Parser 文档:
另外,IO::String 对象也被接受为输出文件句柄。
所以这是完全合法的:
#!/usr/bin/perl
use strict;
use IO::String;
use Pod::Text;
my $buffer;
my $io = IO::String->new($buffer);
my $parser= Pod::Text->new (sentence => 0, width => 78);
$parser->parse_from_file('/usr/share/perl5/Net/Jabber.pm',$io);
print $buffer;
另一方面,请记住,您可以使用反引号捕获任何命令的输出,例如
$text = `/usr/bin/pod2usage /usr/share/perl5/Net/Jabber.pm`;
或qx{} 为清楚起见:
$text = qx{/usr/bin/pod2usage /usr/share/perl5/Net/Jabber.pm};
【讨论】:
IO::String 对各种事情都有用。
my $string; $parser->output_string(\$string);,然后您将得到所有输出到$字符串。 Pod::Text 比反引号/qx{} IMO 更有意义,因为它是跨平台的。
您不必自己完成所有 Pod 解析;其中大部分已经使用Pod::Simple 完成。您可以编写一个简短的子类来做您需要的任何事情。我在 Mastering Perl 中有一章详细介绍了细节,但您也可以查看我的 Pod::Perldoc::TOC 模块以查看一个简短示例。
基本上,您处理 =head1 元素,但跳过那些不是 SYNOPSIS 的元素。一旦遇到正确的 =head1,设置一个标志并处理该部分,直到遇到另一个 =head1,此时您停止解析。你可以在 =head1 之间做任何你喜欢的事情,包括附加到一个变量。
【讨论】: