是否有向脚本添加帮助功能的标准方法?最简单的方法可能是接受一个参数并打印一些文本,如果它是“-help”或其他东西。有没有人有任何关于如何做到这一点的例子?
谢谢!
是否有向脚本添加帮助功能的标准方法?最简单的方法可能是接受一个参数并打印一些文本,如果它是“-help”或其他东西。有没有人有任何关于如何做到这一点的例子?
谢谢!
考虑Getopt::Long加上Pod::Usage。我编写 CLI 工具的常用模式:
#!/usr/bin/env perl
# ABSTRACT: Short tool description
# PODNAME: toolname
use autodie;
use strict;
use utf8;
use warnings qw(all);
use Getopt::Long;
use Pod::Usage;
# VERSION
=head1 SYNOPSIS
toolname [options] files
=head1 DESCRIPTION
...
=cut
GetOptions(
q(help) => \my $help,
q(verbose) => \my $verbose,
) or pod2usage(q(-verbose) => 1);
pod2usage(q(-verbose) => 1) if $help;
# Actual code below
易于使用:
if( $ARGV[0] eq '-h' || $ARGV[0] eq '-help')
{
help();
exit;
}
sub help { print "My help blah blah blah\n";
}
看看https://github.com/qazwart/SVN-Watcher-Hook/blob/master/svn-watch.pl。我使用一种技术来组合Getopt::Long
模块和Pod::Usage
模块。
主要动作发生在第 97 到 106 行和第 108 到 110 行。
这Getopt::Long
是一个非常常用的模块,因为它可以轻松处理命令行参数。很少使用 Pod 文档。但是,所有 CPAN 模块和所有 Perl 内置模块都使用 Pod 文档,所以如果您不知道,请学习它。POD 并不难学,而且它内置在 Perl 中,因此所有 Perl 程序都可以自我记录。perldoc
您可以使用该命令打印出任何程序的 POD 文档。尝试这个:
$ perldoc File::Find
您还可以使用pod2html
,pod2text
和其他类型的翻译命令将 POD 文档打印成 HTML 等。
在我了解 POD 之前,我会在我的程序顶部放置这样的内容:
########################################################
# USAGE
#
my $USAGE =<<USAGE;
Usage:
foo [ -baz -fu <bar>] [-help]
where:
baz: yadda, yadda, yadda
fu: yadda, yadda, yadda
help: Prints out this helpful message
USAGE
#
######################################################
然后,在我的程序中,我可以这样做:
if ($help) {
print "$USAGE\n";
exit 0;
}
这样,有人可以查看代码并阅读使用文本。这也将与您使用-help
参数时打印出的文本相同。
我这样做的方法是利用从命令行参数Getopt::Std
中找到一个标志。-h
use strict;
use warnings;
use Getopt::Std;
my %args;
getopts('h', \%args);
my $help = "help goes here. You can use
more than one line to format the text";
die $help if $args{h};
# otherwise continue with script...
更复杂的方法是使用POD::usage
,尽管我个人没有尝试过这种方式。