2014-10-29 80 views
1

我有一些几乎相同的Perl脚本,所以使用文档几乎类似。例如,prog1.pl可能是:重构POD文档

use warnings; 
use strict; 
use Getopt::Long qw(GetOptions); 
use Pod::Usage qw(pod2usage); 

my $help; 

GetOptions(help=>\$help); 
pod2usage(-message => "", -verbose => 2, -output => \*STDERR) if $help; 

__END__ 

=head1 SYNOPSIS 

prog [OPTIONS] 

=head1 OPTIONS 

=over 4 

=item --help 

Print this summary. 

=back 

=head1 DESCRIPTION 

A program 

现在prog2.pl是一个类似的脚本(这里没有显示)。假设它有一组选项的相同文档。对于这个虚拟示例,只需说明两个脚本的help选项的文档是相同的。我如何重构该文档字符串(即字符串"Print this summary."),以便我不必在prog1.plprog2.pl中都重复相同的字符串?

回答

1

This link指的是两个模块,可以帮助您使用POD文档的模板:Pod::TemplatePod::Weaver

从模板自动生成POD文档,并使用-input选项将生成的POD文件的文件名指定为pod2usage

+0

谢谢!我使用了'Pod :: Template'和'IO :: String'。 – 2014-11-02 11:06:42

0

以下是使用Pod::Template的可能解决方案。首先创建一个文件help.pod有:

=Template help 

=item B<--help> 

Print this summary. 

=back 

然后我们包括此程序的使用POD文档中使用:

use warnings; 
use strict; 
use Pod::Template; 
use File::Spec::Functions qw(catfile); 
use Getopt::Long qw(GetOptions); 
BEGIN { $Pod::Usage::Formatter = 'Pod::Text::Termcap'; } 
use Pod::Usage qw(pod2usage); 
use IO::String; 

my $parser = Pod::Template->new(); 
$parser->parse(template => $0); 

my $io = IO::String->new($parser->as_string); 
my $help; 

GetOptions(help=>\$help); 
pod2usage(-message => "", -verbose => 2, -output => \*STDERR, -input => $io) if $help; 


__END__ 

=Include help.pod as Help 

=head1 SYNOPSIS 

<prog> [OPTIONS] 

=head1 OPTIONS 

=over 4 

=Insert Help->help 

=head1 DESCRIPTION 

A program