スクリプトにヘルプ機能を追加する標準的な方法はありますか? 最も簡単な方法は、引数を取り、「-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 プログラムを自己文書化できます。コマンドを使用して、任意のプログラムの POD ドキュメントを印刷できますperldoc
。これを試して:
$ perldoc File::Find
やその他の種類の変換コマンドを使用してpod2html
、 POD ドキュメントを HTML などに出力することもできます。pod2text
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
私は個人的にこの方法を試していませんが、より洗練されたアプローチはを使用することです。