从Pod文件中删除Pod作为Pod

时间:2014-11-02 12:10:55

标签: perl

我正在尝试从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';

3 个答案:

答案 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源。