【问题标题】:Strip Pod as Pod from Perl file从 Perl 文件中剥离 Pod 作为 Pod
【发布时间】:2014-11-02 12:10:54
【问题描述】:

我正在尝试从 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 打印为文本。有没有可以给我 Pod 文本的 CPAN 模块,即:

=head1 SYNOPSIS

prog [OPTIONS]

改为?

更新

该解决方案应该能够处理字符串中的 Pod 文档,例如

my $str = '__END__

=head1 SYNOPSIS';

【问题讨论】:

    标签: perl


    【解决方案1】:

    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 可执行文件是您可能想要的Pod::Perldoc 的一个非常简单的包装器感兴趣考虑自己使用。

    【讨论】:

    • 谢谢,但它不适用于嵌入在字符串中的 Pod 文档。有关示例,请参阅我更新的问题..
    • 好吧,如果您更改问题,给定答案不再有效也就不足为奇了。很高兴您找到了新问题的解决方案。
    • perldoc的问题是有一个bug,所以它认为嵌入在字符串中的Pod属于文档。
    【解决方案2】:

    这可以使用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]
    

    【讨论】:

    • 感谢这个伟大的解决方案。它甚至适用于嵌入在字符串中的 Pod 文档,例如 my $str='__END__ =head1 SYNOPSIS';
    【解决方案3】:

    Pod::Simple::SimpleTree 会将它作为解析树提供给您。您可以轻松地将其转换回 POD 源代码。

    【讨论】:

      【解决方案4】:

      为什么不简单地从文件中获取 pod:

      open SR, $0;
      print grep /^=/../^=cut$/, <SR>;
      close SR;
      

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 2018-04-03
        • 2018-11-16
        • 2022-01-26
        • 2019-08-01
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多