【问题标题】:How can I produce an HTML summary of Perl modules or scripts in a directory?如何生成目录中 Perl 模块或脚本的 HTML 摘要?
【发布时间】:2010-03-17 17:00:50
【问题描述】:

是否有可用的工具可以在目录树中生成 perl 模块或脚本的 HTML 摘要列表?

给定

 =head1 NAME

 wibble.pl - does wibble actions

我想看看类似的东西

<a href="docsforwibble">wibble.pl</a> - does wibble actions
<a href="docsforwobble">wobble.pl</a> - does wobble actions

【问题讨论】:

    标签: perl perl-pod


    【解决方案1】:

    pod2html --recurse --podpath &lt;dirname&gt;

    perldoc pod2html

    【讨论】:

    • 这似乎只适用于.pod 文件,还是我遗漏了什么?
    • 如何递归地创建 pod 文件?
    【解决方案2】:

    使用Pod::FindPod::Parser 分发中很容易抽出一个。

    下面的脚本会为在我的site/lib/CGI 下可以找到的任何内容创建一个基本索引文件。这是一个示范。使用pod2html 可能会更好,但这个脚本可能仍然有用。

    #!/usr/bin/perl
    
    use strict; use warnings;
    use autodie;
    
    use File::Spec::Functions qw( canonpath );
    use HTML::Template;
    use Pod::Find qw(pod_find simplify_name);
    use Pod::Select;
    
    my $mod_top = canonpath 'c:/opt/perl/site/lib/CGI';
    my $html_top = 'c:/opt/perl/html/site/lib/CGI';
    
    my %pods = pod_find($mod_top);
    my @pods;
    
    for my $pod ( sort keys %pods ) {
        (my $link = $pod) =~ s/^\Q$mod_top//;
        $link =~ s/\.\w+\z//;
        $link = "file:///${html_top}${link}.html";
    
        my $name;
        {
            local *STDOUT;
            open STDOUT, '>', \$name;
            podselect({-sections => [ 'NAME' ] }, $pod);
        }
        $name = '' unless defined $name;
        $name =~ s/^=head1\s+NAME\s+//;
        $name =~ s/\s+\z//;
    
        push @pods, {
            POD => $pods{$pod},
            NAME => $name,
            LINK => $link,
        };
    }
    
    my $tmpl = HTML::Template->new(scalarref => \ <<EO_TMPL
    <!DOCTYPE HTML>
    <html>
    <head><title>Index of Perl Modules</title></head>
    <body>
    <h1><TMPL_VAR CATEGORY></h1>
    <dl>
    <TMPL_LOOP PODS>
    <dt><a href="<TMPL_VAR LINK>"><TMPL_VAR POD></a></dt>
    <dd><TMPL_VAR NAME></dd>
    </TMPL_LOOP>
    </ul>
    </body>
    </html>
    EO_TMPL
    );
    
    $tmpl->param(
        CATEGORY => 'CGI',
        PODS => \@pods,
    );
    $tmpl->output(print_to => \*STDOUT);
    

    【讨论】:

    • 谢谢@Sinan 这看起来像是我正在寻找的东西。
    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 2010-10-18
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    相关资源
    最近更新 更多