目次
Getopt::Long - 高機能なコマンドラインオプション解析
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
Getopt::Long モジュールは 洗練された getopt 関数, GetOptions() を 実装しています. この関数は GNU 拡張を共存しつつ POSIX 形式のコマンド ラインオプションの理念を引き継いでいます. 一般的にこのことは, オプションは一文字ではなく長い名前を持ち, 2つのダッシュ "--" で 始まります. 伝統的な一文字でのアプローチでよく見られるコマンドライン オプションを1つに束ねる使い方も, サポートはされていますがデフォルトでは 有効にされていません.
コマンドラインで操作するプログラムは伝統的にその引数をコマンドライン から受け取ります. 例えばプログラムが知る必要のあるファイル名や その他の情報等です. 引数に加えて, これらのプログラムはしばしば おまけにコマンドラインオプションを受け取ります. オプションは プログラムの動作に必ずしも必要ではありません, 従って'オプション' という名前なのですが, しかしそのデフォルトの振る舞いを変更するために 使用されます. 例えばあるプログラムはそのジョブを静かに行いますが, 適切なオプションを渡すことでそれが何をしているかに関して事細かに 情報を提供したりするでしょう.
コマンドラインオプションには幾つかの種類があります. 伝統的に, これらは1つのダッシュで始まり1つの文字からなります.
-l -a -c
大抵は, これらの1文字のオプションはまとめることが出来ます:
-lac
オプションはあたりを持つこともあります. オプションはオプション文字 の後に配置されます. その間に空白が置かれることもありますが, 置かれないこともあります:
-s 24 -s24
これらのオプションはとても不可解な性質だったため, 長い名前を使用する
別の形式が開発されました. 不可解な -l の代わりにより説明的な
--long を使うことが出来るようになりました. 束になった1文字
オプションと長い名前のオプションとを区別するために, オプション名には
2つのダッシュが使われました. 長い名前のオプションの初期の実装では
プラス記号 + が使われることもありました. またオプションの値は
次の2つの書き方があります:
--size=24
若しくは
--size 24
+ 形式は今では廃止され, 使わないことが強く推奨されています.
Getopt::Long は newgetopt.pl の Perl5 後継です. これは新しい
形式のコマンドラインオプションをサポートする最初の Perl モジュール
でした. それ故 Getopt::Long の名前です. このモジュールは1文字の
オプションとその合成もサポートしています. 1文字のオプションは
任意のアルファベット文字, 疑問符, そしてダッシュのいずれかでしょう.
長いオプションは文字、数字、そしてダッシュからなります.
これは今のところ Getopt::Long では強制されていませんが, 連続する
複数のダッシュは許可されていません. そしてオプション名はダッシュで
終わってはなりません.
Getopt::Long を Perl プログラムから使うときには, 次の行を Perl プログラムに記述します.
use Getopt::Long;
これは Getopt::Long モジュールのコアをロードし, プログラムが それを使う準備をします. Getopt::Long の実際のコードの多くは そこで準備された関数のいずれかを実際に呼び出すまではロード されません.
デフォルトの設定では, オプション名はユニークな限りで省略可能で, 大文字小文字を区別せず, 長い名前のオプションであっても1つのダッシュで 利用できます. そして, オプションはオプションでない引数の間に 配置することも出来ます. Getopt::Long を設定する方法の詳細は, "Getopt::Long の設定" を参照してください.
一番簡単なオプションは値を撮らないオプションでしょう. それはコマンドラインに存在するだけでオプションを有効にします. よく使われる例です:
--all --verbose --quiet --debug
単純なオプションは処理するのも簡単です:
my $verbose = ''; # option variable with default value (false)
my $all = ''; # option variable with default value (false)
GetOptions ('verbose' => \$verbose, 'all' => \$all);
GetOptions() の呼び出しは @ARGV で提供されるコマンドライン引数
を解析し, オプションがコマンドラインにあればオプション変数に値 1 を
設定します. そうでなければオプション変数にはふれられません.
オプション値を真に設定することをしばしばオプションを有効にすると
呼びます.
GetOptions() 関数に指示したオプション名はオプション指定(specification) と呼ばれます. 後ほどこの指定が単なるオプション名以上の意味があることを 知るでしょう. 変数へのリファレンスはオプション格納先(destination)と 呼びます.
GetOptions() はコマンドラインを正常に処理したときに真を返します. そうでなければ STDERR にエラーメッセージを書き出して偽を返します.
Getopt::Long は簡単なオプションの2つの変種をサポートしています: 反転 オプションと 増分(incremental) オプションです.
反転オプションはオプション名の後に 感嘆符 ! をつけることで指定します.
my $verbose = ''; # option variable with default value (false)
GetOptions ('verbose!' => \$verbose);
さて, コマンドラインでの --verbose は $verbose を有効にします.
しかし --noverbose を使うことでその値を 0 に設定し $verbose
を無効にすることも出来ます. 適切なデフォルト値を使うことでプログラムは
$verbose がデフォルトで偽なのか, それとも --noverbose を
使うことで無効にするのかを選ぶことが出来ます.
増分オプションはオプション名の後にプラス記号 + をつけることで
指定します:
my $verbose = ''; # option variable with default value (false)
GetOptions ('verbose+' => \$verbose);
コマンドラインで --verbose を使うと $verbose の値が増加
されます. これによってプログラムはコマンドラインにオプションが
何回指定されたかを追跡することが出来ます. 例えば --verbose が
出現する毎にプログラムのログの詳細レベルを増加させることが出来ます.
通常プログラムは他の引数, 例えばファイル名と同じようにしてコマンド
ラインオプションを受け取ります. 常に先にオプションを指定して
それ以外の引数を最後に置くのはよい習慣です. Getopt::Long は,
しかしながらオプションと引数とを混在させて引数の残りをプログラムに
渡す前に全てのオプションを'濾過'することを可能にしています.
Getopt::Long が後ろの引数を処理してしまうのを止めるには,
コマンドラインに2重のダッシュ -- を挟みます:
--size 24 -- --all
この例では, --all はオプションとしては扱われません. そして
@ARGV の中で無傷のままプログラムに渡されます.
オプションが値を受け取るにはそのオプションの値が必須であるかそうで ないのか, そしてどんな種類の値を想定しているのかを指定しなければ なりません.
3種類の値がサポートされています: 整数値, 浮動小数点値, そして文字列.
オプション値を必要と指定のなら, Getopt::Long はオプションに続く コマンドライン引数をオプション変数に代入します. もし, しかしながら, オプション値が任意と指定されているのなら, 値がコマンドライン引数ぽく ないときにのみこれを行います.
my $tag = ''; # option variable with default value
GetOptions ('tag=s' => \$tag);
オプション指定において, オプション名の後に等号 = と文字 s を
続けます. 等号はこのオプションが値を要求していることを示します.
文字 s はこの値が任意の文字列であることを示します. 他には
整数値には i を, 浮動小数点値には f を指定できます.
等号の代わりにコロン : を使うことでオプション値が任意にもできます.
このとき適切な値が指定されなかったときには文字列値オプションには
空文字列 '' が, 数値オプションには 0 が設定されます.
オプションは幾つかの値を受け取ることもあります. 例えば, プログラムは ライブラリファイルを探すために複数のディレクトリを使うかもしれません:
--library lib/stdlib --library lib/extlib
この振る舞いを達成するにはオプションの格納先に配列へのリファレンスを 指定するだけです:
GetOptions ("library=s" => \@libfiles);
それ以外でも, (型の指定の後に) "@" を追加することでオプションは 複数の値を取ることを指定でき, スカラーへのリファレンスを格納先に 渡すことが出来ます.
GetOptions ("library=s@" => \$libfiles);
この例においては, @libfiles (もしくは @$libfiles) には
二つの完全な文字列: "lib/srdlib" 及び "lib/extlib" が
この順番で格納されます. 整数値のみ若しくは浮動小数点値のみが
許容される値であると指定することも出来ます.
オプションを複数回描くのと同様にコンマで区切った値のリストを 許可すると便利なこともあります. これは Perl の split() 及び join() を使うことで簡単に行えます.
GetOptions ("library=s" => \@libfiles);
@libfiles = split(/,/,join(',',@libfiles));
もちろん, 目的に合わせた適切な区切り文字を選ぶことが重要です.
警告: 以下の記述は実験的な機能(experimental feature)です.
オプションは一度に複数の値を取ることも出来ます, 例えば:
--coordinates 52.2 16.4 --rgbcolor 255 255 149
これはオプション指定に繰り返し指定を加えることで行えます.
繰り返し指定は正規表現パターンで使う {...} 繰り返し指定ととても
よく似ています. 例えば先ほどのコマンドラインは次の指定で扱えます:
GetOptions('coordinates=f{2}' => \@coor, 'rgbcolor=i{3}' => \@color);
オプションの格納先は配列もしくは配列へのリファレンスではければ なりません.
オプションが受け取る最小と最大の個数を指定することも出来ます.
foo=s{2,4} は少なくとも2つのそして最大4個の引数を受け取る
オプションを示します. foo=s{,} は1つ以上の値を示し, foo:s{,} は
0個以上の値を示します.
もしオプションの格納先がハッシュへのリファレンスだったときには,
オプションはその値として key=value の形式の文字列を
受け取ります. この値はそのキーでハッシュに格納されます.
GetOptions ("define=s" => \%defines);
次の形式も可能です:
GetOptions ("define=s%" => \$defines);
次のコマンドラインオプションを受け取ったとします:
--define os=linux --define vendor=redhat
ハッシュ %defines (若しくは %$defines) には2つのキーが格納され,
"os" には値 "linux" が, "vendor" には値 "redhat" が格納されます.
整数値のみ若しくは浮動小数点値のみが許容される値であると指定することも
出来ます. キーには常に文字列が取られます.
オプション格納先として関数(若しくは無名関数)へのリファレンスを設置 することで, オプションがコマンドラインに出現したとき(実際に毎回)処理 されるべき事の完全な制御を行うことが出来ます. GetOptions() が オプションに遭遇したとき, その関数が2つ若しくは3つの引数で 呼び出されます. 最初の引数はオプション名です. 格納先がスカラー 若しくは配列の場合には2つめの引数は格納される値です. 格納先がハッシュの場合には2つめの引数はハッシュのキーで, 3つめの 引数は格納される値です. 値を格納するか, 適切な何かを行うかは 関数次第です.
このメカニズムの簡単な例は相互に関連するオプションの実装です. 以下は例です:
my $verbose = ''; # option variable with default value (false)
GetOptions ('verbose' => \$verbose,
'quiet' => sub { $verbose = 0 });
ここで --verbose 及び --quiet は同じ変数 $verbose を
制御しますがその値は正反対の物です.
もし関数がエラーを発生させる必要があるなら希望のエラーメッセージを引数 として die() を呼んでください. GetOptions() は die() をキャッチして, エラーメッセージを発行し, 終了時に返されるエラーとして記録します.
エラーメッセージのテキストが感嘆符!で始まる時は GetOptions() によって
特別に処理されます. 現時点では1つの特殊コマンドが実装されています:
die("!FINISH") はあたかも2重のダッシュ -- に遭遇したかのように
その場でオプションの処理を停止させます.
オプションに覚えやすい別名を提供することが親切なこともあります.
例えば --height は --length の別名を持つ等です.
別名は垂直線文字 | で区切ってオプション指定の中に含めることが
出来ます. いまの例を記述すると次のようになります:
GetOptions ('length|height=f' => \$length);
1つめの名前はプライマリ名と呼ばれ, それ以外は別名 と呼ばれます. ハッシュにオプションを格納するときには常にプライマリ名が使われます.
複数の別名を指定することも出来ます.
追加で設定をしなければ, GetOptions() はオプション名の大文字小文字を 無視します. そしてユニークな範囲で省略することも許します.
GetOptions ('length|height=f' => \$length, "head" => \$head);
この指定において, --l 及び --L は length オプションとして
有効です. しかし head 及び height オプションに対しては少なくとも
--hea 及び --hei が必要です.
各オプション指定は2つの部分からなります: 名前指定及び引数指定.
名前指定にはオプションの名前が入ります. 任意で垂直線文字で区切られた 別名のリストも指定できます.
length option name is "length"
length|size|l name is "length", aliases are "size" and "l"
引数指定は省略可能です. 省略時にはオプションは真偽値として扱われ, コマンドラインでオプションが使用されたときには値 1 が設定されます.
引数指定は以下の形式を取ることが出来ます:
オプションは引数を取らず, "no" もしくは "no-" で前置することで反転されます.
例えば "foo!" は --nofoo 及び --no-foo (値 0 が設定されます)
と同様に --foo (値 1 が設定されます) を許可します. もしオプションが
別名を持っていれば別名にも同様に適用されます.
合成が有効なときに1文字オプションに反転を適用するのは筋の通らない (pointless) ことであり, 警告が発せられます.
オプションは引数を取らず, コマンドラインに現れるたびに 1 ずつ
インクリメントしていきます. 例えば "more+" で の指定で
--more --more --more の引数を与えると3回増加され値 3 となります
(初期値が 0 若しくは未定義だったとき).
+ 指定は格納先がスカラーでなかったときには無視されます.
このオプションは与えられた形式の引数を要求します. サポートされている形式は以下の通りです:
文字列. 任意の文字の集合. - や -- から始まる引数も有効です.
整数. 数値列の前に任意で正符号もしくは負符号をおけます.
拡張整数, Perl形式. 任意で正符号もしくは負符号が前置されている
数字列, 若しくは8進数(0 に続けて任意の '0', '1', .. '7'),
もしくは16進数 (0x に続けて '0' .. '9', 'a' .. 'f',
大文字小文字は区別しない) もしくは2進数 (0b に続けて '0' か '1'
の列).
実数. 例えば 3.14, -6.23E24 等.
desttype にはオプションがリストかハッシュかに応じて @ 若しくは
% を指定することが出来ます. これはオプション値の格納先が
他に指定されていない時にのみ必要です. 必要なければ省略するべきです.
repeat にはコマンドラインでこのオプションが受け取る値の個数を
指定します. { [ min ] [ , [ max ] ] } の形式で指定します.
min で引数の最小個数を示します. デフォルト値はオプションが = で
指定されていれば 1, : で指定されていれば 0 です. min は
= / : セマンティクスを上書きすることに注意してください.
max で引数の最大個数を示します. 少なくとも min はなければなりません. もし max が省略されていてでもコンマは使われている場合, 受け取る引数の個数の上限はありません.
= と同様ですが引数が任意であることを示します.
もし(引数が)省略された場合には文字列値オプションには空文字列が, 数値
オプションには 0 が設定されます.
もし文字列引数が - 若しくは -- から始まっているときには
それ自身でオプションとされるので注意してください.
:i と同様ですが, 値が省略されたときに number が設定されます.
:i と同様ですが, 値が省略されるときにオプションの値が増加されます.
Getopt::Long はオブジェクト指向的にも利用できます:
use Getopt::Long;
$p = new Getopt::Long::Parser;
$p->configure(...configuration options...);
if ($p->getoptions(...options descriptions...)) ...
設定オプションはコンストラクターに渡すこともできます.
$p = new Getopt::Long::Parser
config => [...configuration options...];
Getopt::Long は, Perl 5.8 の ithreads 環境においてスレッドセーフです. (実験的であり現在は非推奨の)Perl 5.005 threads実装 ではスレッドセーフ ではありません.
Getopt::Long はヘルプメッセージの生成に Pod::Usage を利用することを おすすめします. 使用例:
use Getopt::Long;
use Pod::Usage;
my $man = 0;
my $help = 0;
GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
pod2usage(1) if $help;
pod2usage(-exitstatus => 0, -verbose => 2) if $man;
__END__
=head1 NAME
sample - Using Getopt::Long and Pod::Usage
=head1 SYNOPSIS
sample [options] [file ...]
Options:
-help brief help message
-man full documentation
=head1 OPTIONS
=over 8
=item B<-help>
Print a brief help message and exits.
=item B<-man>
Prints the manual page and exits.
=back
=head1 DESCRIPTION
B<This program> will read the given input file(s) and do something
useful with the contents thereof.
=cut
詳細は Pod::Usage [CPAN] 参照.
時々, 例えば多くのオプションがある時などに, それぞれ別々の 変数を用意することは面倒なことです. そこで GetOptions() ではもう 1つのメカニズム, オプションのハッシュへの格納をサポートしています.
この機能を利用するには, ハッシュへのリファレンスを GetOptions() の
最初の引数として渡します. コマンドラインで指定されたそれぞれの
オプションは, オプション名をキーとしてハッシュに格納されます.
コマンドラインで実際には使われなかったオプションはハッシュには
置かれません. 言い換えると, オプションが使われたかどうかは
exists($h{option}) (もしくは defined()) でテストすることが
できます. この方法の欠点は, $h{option} を exists() や defined() で
確認なしに使うと, use warnings の環境下では警告がでてしまうことです.
my %h = ();
GetOptions (\%h, 'length=i'); # will store in $h{length}
リストやハッシュ値をとるオプションでは, @ 若しくは % を型の後に
追加する必要があります.
GetOptions (\%h, 'colours=s@'); # will push to @{$h{colours}}
さらに複雑なことに, ハッシュには実際に値を格納する先へのリファレンスを 置くことができます. 例えば:
my $len = 0;
my %h = ('length' => \$len);
GetOptions (\%h, 'length=i'); # will store in $len
これは次の例を全く等価です:
my $len = 0;
GetOptions ('length=i' => \$len); # will store in $len
混在も可能です. 例えばよく利用するオプションは変数に, それ以外のオプションはハッシュの中に置くこともできます:
my $verbose = 0; # frequently referred
my $debug = 0; # frequently referred
my %h = ('verbose' => \$verbose, 'debug' => \$debug);
GetOptions (\%h, 'verbose', 'debug', 'filter', 'size=i');
if ( $verbose ) { ... }
if ( exists $h{filter} ) { ... option 'filter' was specified ... }
合成を使うことで, 複数の1文字のオプションを一度に指定することが
できます. 例えば, a, v, x が有効なオプションであれば,
-vax
は3つ全てを設定します.
Getopt::Long は2段階の合成を提供しています. 合成を有効に するためには Getopt::Long::Configure を呼び出す必要があります.
合成の1レベル目は以下の呼び出しで有効に出来ます:
Getopt::Long::Configure ("bundling");
これが設定されると, 1文字のオプションは合成されますが長い
オプションは曖昧さを回避するために常に二重のダッシュ -- で
呼び出す必要があります. 例えば, vax, a, v, x が
全て有効なオプションの時,
-vax
は a, v そして x を設定しますが,
--vax
は vax を設定します.
合成の2レベル目ではこの制限を取り除きます. 次の呼び出して有効に できます:
Getopt::Long::Configure ("bundling_override");
これで, -vax はオプション vax を設定するようになります.
いずれかのレベルの合成が有効になると, オプションの値は 合成の中に入れることも出来ます. 例えば:
-h24w80
は次と等価です.
-h 24 -w 80
合成を設定したときには, 長いオプションは大文字小文字の区別が ないのにもかかわらず1文字のオプションは大文字小文字を区別 します. 1文字のオプションを同様に大文字小文字の区別を なくすためには次のようにします:
Getopt::Long::Configure ("bundling", "ignorecase_always");
It goes without saying that bundling can be quite confusing. これは当然, スイッチ合成がとても混乱することになります.
通常, コマンドラインの孤独なダッシュ - はオプションとして
認識されません. オプションの処理は("permute" が設定されて
いなければ)終了し, ダッシュは @ARGV に残ります.
孤独なダッシュに対して特殊な処理を行うことも可能です. これは オプション仕様に空の名前を渡すことで行います, 例えば:
GetOptions ('' => \$stdio);
コマンドライン孤独なダッシュは正しいオプションになり, それを
使うことで変数 $stdio が設定されます.
A special option 'name' <> can be used to designate a subroutine
to handle non-option arguments. When GetOptions() encounters an
argument that does not look like an option, it will immediately call this
subroutine and passes it one parameter: the argument name.
For example:
my $width = 80;
sub process { ... }
GetOptions ('width=i' => \$width, '<>' => \&process);
When applied to the following command line:
arg1 --width=72 arg2 --width=60 arg3
This will call
process("arg1") while $width is 80,
process("arg2") while $width is 72, and
process("arg3") while $width is 60.
This feature requires configuration option permute, see section "Configuring Getopt::Long".
Getopt::Long can be configured by calling subroutine
Getopt::Long::Configure(). This subroutine takes a list of quoted
strings, each specifying a configuration option to be enabled, e.g.
ignore_case, or disabled, e.g. no_ignore_case. Case does not
matter. Multiple calls to Configure() are possible.
Alternatively, as of version 2.24, the configuration options may be
passed together with the use statement:
use Getopt::Long qw(:config no_ignore_case bundling);
The following options are available:
This option causes all configuration options to be reset to their default values.
This option causes all configuration options to be reset to their default values as if the environment variable POSIXLY_CORRECT had been set.
Allow option names to be abbreviated to uniqueness.
Default is enabled unless environment variable
POSIXLY_CORRECT has been set, in which case auto_abbrev is disabled.
Allow + to start options.
Default is enabled unless environment variable
POSIXLY_CORRECT has been set, in which case getopt_compat is disabled.
gnu_compat controls whether --opt= is allowed, and what it should
do. Without gnu_compat, --opt= gives an error. With gnu_compat,
--opt= will give option opt and empty value.
This is the way GNU getopt_long() does it.
This is a short way of setting gnu_compat bundling permute
no_getopt_compat. With gnu_getopt, command line handling should be
fully compatible with GNU getopt_long().
Whether command line arguments are allowed to be mixed with options.
Default is disabled unless environment variable
POSIXLY_CORRECT has been set, in which case require_order is enabled.
See also permute, which is the opposite of require_order.
Whether command line arguments are allowed to be mixed with options.
Default is enabled unless environment variable
POSIXLY_CORRECT has been set, in which case permute is disabled.
Note that permute is the opposite of require_order.
If permute is enabled, this means that
--foo arg1 --bar arg2 arg3
is equivalent to
--foo --bar arg1 arg2 arg3
If an argument callback routine is specified, @ARGV will always be
empty upon successful return of GetOptions() since all options have been
processed. The only exception is when -- is used:
--foo arg1 --bar arg2 -- arg3
This will call the callback routine for arg1 and arg2, and then
terminate GetOptions() leaving "arg2" in @ARGV.
If require_order is enabled, options processing
terminates when the first non-option is encountered.
--foo arg1 --bar arg2 arg3
is equivalent to
--foo -- arg1 --bar arg2 arg3
If pass_through is also enabled, options processing will terminate
at the first unrecognized option, or non-option, whichever comes
first.
Enabling this option will allow single-character options to be
bundled. To distinguish bundles from long option names, long options
must be introduced with -- and bundles with -.
Note that, if you have options a, l and all, and
auto_abbrev enabled, possible arguments and option settings are:
using argument sets option(s)
------------------------------------------
-a, --a a
-l, --l l
-al, -la, -ala, -all,... a, l
--al, --all all
The surprising part is that --a sets option a (due to auto
completion), not all.
Note: disabling bundling also disables bundling_override.
If bundling_override is enabled, bundling is enabled as with
bundling but now long option names override option bundles.
Note: disabling bundling_override also disables bundling.
Note: Using option bundling can easily lead to unexpected results, especially when mixing long options and bundles. Caveat emptor.
If enabled, case is ignored when matching long option names. If, however, bundling is enabled as well, single character options will be treated case-sensitive.
With ignore_case, option specifications for options that only
differ in case, e.g., "foo" and "Foo", will be flagged as
duplicates.
Note: disabling ignore_case also disables ignore_case_always.
When bundling is in effect, case is ignored on single-character options also.
Note: disabling ignore_case_always also disables ignore_case.
Automatically provide support for the --version option if the application did not specify a handler for this option itself.
Getopt::Long will provide a standard version message that includes the program name, its version (if $main::VERSION is defined), and the versions of Getopt::Long and Perl. The message will be written to standard output and processing will terminate.
auto_version will be enabled if the calling program explicitly
specified a version number higher than 2.32 in the use or
require statement.
Automatically provide support for the --help and -? options if the application did not specify a handler for this option itself.
Getopt::Long will provide a help message using module Pod::Usage [CPAN]. The message, derived from the SYNOPSIS POD section, will be written to standard output and processing will terminate.
auto_help will be enabled if the calling program explicitly
specified a version number higher than 2.32 in the use or
require statement.
Options that are unknown, ambiguous or supplied with an invalid option
value are passed through in @ARGV instead of being flagged as
errors. This makes it possible to write wrapper scripts that process
only part of the user supplied command line arguments, and pass the
remaining options to some other program.
If require_order is enabled, options processing will terminate at
the first unrecognized option, or non-option, whichever comes first.
However, if permute is enabled instead, results can become confusing.
Note that the options terminator (default --), if present, will
also be passed through in @ARGV.
The string that starts options. If a constant string is not
sufficient, see prefix_pattern.
A Perl pattern that identifies the strings that introduce options.
Default is --|-|\+ unless environment variable
POSIXLY_CORRECT has been set, in which case it is --|-.
A Perl pattern that allows the disambiguation of long and short
prefixes. Default is --.
Typically you only need to set this if you are using nonstandard prefixes and want some or all of them to have the same semantics as '--' does under normal circumstances.
For example, setting prefix_pattern to --|-|\+|\/ and
long_prefix_pattern to --|\/ would add Win32 style argument
handling.
Enable debugging output.
This subroutine provides a standard version message. Its argument can be:
A string containing the text of a message to print before printing the standard message.
A numeric value corresponding to the desired exit status.
A reference to a hash.
If more than one argument is given then the entire argument list is assumed to be a hash. If a hash is supplied (either as a reference or as a list) it should contain one or more elements with the following keys:
-message-msgThe text of a message to print immediately prior to printing the program's usage message.
-exitvalThe desired exit status to pass to the exit() function. This should be an integer, or else the string "NOEXIT" to indicate that control should simply be returned without terminating the invoking process.
-output
A reference to a filehandle, or the pathname of a file to which the
usage message should be written. The default is \*STDERR unless the
exit value is less than 2 (in which case the default is \*STDOUT).
You cannot tie this routine directly to an option, e.g.:
GetOptions("version" => \&VersionMessage);
Use this instead:
GetOptions("version" => sub { VersionMessage() });
This subroutine produces a standard help message, derived from the program's POD section SYNOPSIS using Pod::Usage [CPAN]. It takes the same arguments as VersionMessage(). In particular, you cannot tie it directly to an option, e.g.:
GetOptions("help" => \&HelpMessage);
Use this instead:
GetOptions("help" => sub { HelpMessage() });
Configuration errors and errors in the option definitions are
signalled using die() and will terminate the calling program unless
the call to Getopt::Long::GetOptions() was embedded in eval { ...
}, or die() was trapped using $SIG{__DIE__}.
GetOptions returns true to indicate success.
It returns false when the function detected one or more errors during
option parsing. These errors are signalled using warn() and can be
trapped with $SIG{__WARN__}.
The earliest development of newgetopt.pl started in 1990, with Perl
version 4. As a result, its development, and the development of
Getopt::Long, has gone through several stages. Since backward
compatibility has always been extremely important, the current version
of Getopt::Long still supports a lot of constructs that nowadays are
no longer necessary or otherwise unwanted. This section describes
briefly some of these 'features'.
When no destination is specified for an option, GetOptions will store
the resultant value in a global variable named opt_XXX, where
XXX is the primary name of this option. When a progam executes
under use strict (recommended), these variables must be
pre-declared with our() or use vars.
our $opt_length = 0;
GetOptions ('length=i'); # will store in $opt_length
To yield a usable Perl variable, characters that are not part of the
syntax for variables are translated to underscores. For example,
--fpp-struct-return will set the variable
$opt_fpp_struct_return. Note that this variable resides in the
namespace of the calling program, not necessarily main. For
example:
GetOptions ("size=i", "sizes=i@");
with command line "-size 10 -sizes 24 -sizes 48" will perform the equivalent of the assignments
$opt_size = 10;
@opt_sizes = (24, 48);
A string of alternative option starter characters may be passed as the first argument (or the first argument after a leading hash reference argument).
my $len = 0;
GetOptions ('/', 'length=i' => $len);
Now the command line may look like:
/length 24 -- arg
Note that to terminate options processing still requires a double dash
--.
GetOptions() will not interpret a leading "<>" as option starters
if the next argument is a reference. To force "<" and ">" as
option starters, use "><". Confusing? Well, using a starter
argument is strongly deprecated anyway.
Previous versions of Getopt::Long used variables for the purpose of
configuring. Although manipulating these variables still work, it is
strongly encouraged to use the Configure routine that was introduced
in version 2.17. Besides, it is much easier.
それは 'options(選択可能なもの)' だからです.
The command line is not split by GetOptions, but by the command line interpreter (CLI). On Unix, this is the shell. On Windows, it is COMMAND.COM or CMD.EXE. Other operating systems have other CLIs.
It is important to know that these CLIs may behave different when the
command line contains special characters, in particular quotes or
backslashes. For example, with Unix shells you can use single quotes
(') and double quotes (") to group words together. The following
alternatives are equivalent on Unix:
"two words"
'two words'
two\ words
In case of doubt, insert the following statement in front of your Perl program:
print STDERR (join("|",@ARGV),"\n");
to verify how your CLI passes the arguments to the program.
Are you running Windows, and did you write
use GetOpt::Long;
(note the capital 'O')?
You can only obtain this using an alias, and Getopt::Long of at least version 2.13.
use Getopt::Long;
GetOptions ("help|?"); # -help and -? will both set $opt_help
Johan Vromans <jvromans@squirrel.nl>
This program is Copyright 1990,2005 by Johan Vromans. このプログラムはフリーソフトウェアです. あなたは Perl Artistic License もしくは Free Software Foundation による GNU General Public License バージョン2若しくは(望むのなら)それ以降の元で再配布及び改変を 行うことができます.
このプログラムは役に立つことを祈って配布されていますが, 一切の保証はされません. いかなる需要や特定目的への適合している 保証さえもありません. 詳細は GNU General Public License を 参照してください.
もし GNU General Public License のコピーを持っていないのなら, the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA 宛に手紙を送るとよいでしょう.
山科 氷魚 (YAMASHINA Hio) <hio@hio.jp>
原典: perl VERSION 5.8.8. 翻訳日: 2006-08-04.