2013年もGetopt::Long(後編)
という訳で、前回の続き。
pod2usageとか、long optionとshort optionとか。
参考にしたページ
2013年のGetopt::Long – おそらくはそれさえも平凡な日々
http://www.songmu.jp/riji/archives/2013/02/2013getoptlong.html
PODからUsageを生成する
use strict; use warnings; use v5.10; use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/; use Pod::Usage qw/pod2usage/; my %opt = (); GetOptions( \%opt, 'foo=i' ) or pod2usage(1); pod2usage(2) if ( not exists $opt{foo} ); say 'foo = ', $opt{foo}; __END__ =head1 DESCRIPTION pod2usage sample =head1 SYNOPSIS perl iii.pl --foo <integer> =cut
上記のソースを”iii.pl”に保存して、
以下のように実行すると、
$ perl iii.pl
Usage:
perl iii.pl --foo <integer>
この通り、GetOptions()が失敗するとpod2usage()
が呼ばれ、
PODからUsageが生成される。
pod2usage()
の引数は終了ステータスに使用されるので、
以下の方法で確認することが出来る(*1)。
$ perl iii.pl; echo $?
Usage:
perl iii.pl --foo <integer>
2
ちなみに、オプションに整数以外を指定すると、
以下のような結果になる。
$ perl iii.pl --foo aaa; echo $?
Value "aaa" invalid for option foo (number expected)
Usage:
perl iii.pl --foo <integer>
1
オプションに整数を指定した場合は、以下の通り。
$ perl iii.pl --foo 2; echo $?
foo = 2
0
あと、use Getopt::Long
にauto_help
を指定すると、
--help
を付けて実行した際に、Usageが表示される。
$ perl iii.pl --help; echo $?
Usage:
perl iii.pl --foo <integer>
0
終了ステータスを見る限り、
pod2usage(0)
が呼ばれてるっぽい。
PODを読む限り、--help
の他に、-?
でも良いみたいだけど、
-h
が含まれてない点がちょっと気になるところ。
「long option」と「short option」
bundling
が指定されていると、
-hoge
が、-h -o -g -e
として扱われる。
なので、これまで先頭にハイフンを2つ付けた--hoge
を使ってきた。
このハイフンを2つ付けたオプションを「long option」、
1つだけ付けたオプションを「short option」って呼ぶらしい。(*2)
use strict; use warnings; use v5.10; use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/; use Pod::Usage qw/pod2usage/; my %opt = (); GetOptions( \%opt, 'foo|f=i' ) or pod2usage(1); pod2usage(2) if ( not exists $opt{foo} ); say 'foo = ', $opt{foo}; __END__ =head1 DESCRIPTION pod2usage sample =head1 SYNOPSIS perl jjj.pl --foo|-f <integer> =cut
上記のソースを”jjj.pl”に保存して、
以下のように実行すると、
$ perl jjj.pl -f 3
foo = 3
という訳で、'foo=i'
を'foo|f=i'
に変更しただけで、
short optionの-f
でも引数を受け取れるようになった。
ついでなので、PODも修正した。
ちなみに、'foo|f=i'
は、'f|foo=i'
とは書けないのと、
$opt{f}
には、引数が格納されない点に注意する。
これは、-f
でも--foo
でも、$opt{foo}
に引数が格納されるという意味。
という訳で、自分が使う分にはこれで一通り。
おしまい。
(*1) 実行環境は、MacOS X 10.7.5上で起動したターミナル。
(*2) 正式名称はわかんないです、ごめんなさい。
Leave a Comment