我正在尝试从Perl文件中提取Pod文档。我不想像Pod::Simple::Text
那样将文档转换为文本。我只想将Pod文本作为Pod文本,这样我以后可以将其提供给Pod::Template
。例如:
use warnings;
use strict;
use Pod::Simple::Text;
my $ps=Pod::Simple::Text->new();
my $str;
$ps->output_string( \$str );
$ps->parse_file($0);
print $str;
__END__
=head1 SYNOPSIS
prog [OPTIONS]
这会将Pod打印为文本。是否有CPAN模块可以给我Pod文本,即:
=head1 SYNOPSIS
prog [OPTIONS]
代替?
更新
解决方案应该能够处理字符串中的Pod文档,例如
my $str = '__END__
=head1 SYNOPSIS';
答案 0 :(得分:4)
使用perldoc
的-u
选项。这将剥离POD并将其显示为原始。
如果要从Perl程序中提取POD,可以执行以下操作:
my $rawpod;
if (open my $fh, '-|', 'perldoc', '-u', $filename) {
local $/;
my $output = <$fh>;
if (close $fh) {
$rawpod = $output;
}
}
如果确实不希望将perldoc
作为可执行文件运行,您可能会感兴趣的是perldoc
可执行文件是一个非常简单的包装器{{{ 1}}你可能想要考虑使用自己。
答案 1 :(得分:3)
可以使用PPI
:
use strict;
use warnings;
use PPI;
# Slurp source code
my $src = do { local ( @ARGV, $/ ) = $0; <> };
# Load a document
my $doc = PPI::Document->new( \$src );
# Find all the pod within the doc
my $pod = $doc->find('PPI::Token::Pod');
for (@$pod) {
print $_->content, "\n";
}
=comment
Hi Pod
=cut
1;
__END__
=head1 SYNOPSIS
prog [OPTIONS]
输出:
=comment
Hi Pod
=cut
=head1 SYNOPSIS
prog [OPTIONS]
答案 2 :(得分:0)
Pod :: Simple :: SimpleTree会将它作为解析树提供给你。您可以轻松地将其转换回POD源。