Getopt::Long - 高機能なコマンドラインオプション解析

目次


名前

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 事始め

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 若しくは未定義だったとき).

+ 指定は格納先がスカラーでなかったときには無視されます.

= type [ desttype ] [ repeat ]

このオプションは与えられた形式の引数を要求します. サポートされている形式は以下の通りです:

s

文字列. 任意の文字の集合. --- から始まる引数も有効です.

i

整数. 数値列の前に任意で正符号もしくは負符号をおけます.

o

拡張整数, Perl形式. 任意で正符号もしくは負符号が前置されている 数字列, 若しくは8進数(0 に続けて任意の '0', '1', .. '7'), もしくは16進数 (0x に続けて '0' .. '9', 'a' .. 'f', 大文字小文字は区別しない) もしくは2進数 (0b に続けて '0' か '1' の列).

f

実数. 例えば 3.14, -6.23E24 等.

desttype にはオプションがリストかハッシュかに応じて @ 若しくは % を指定することが出来ます. これはオプション値の格納先が 他に指定されていない時にのみ必要です. 必要なければ省略するべきです.

repeat にはコマンドラインでこのオプションが受け取る値の個数を 指定します. { [ min ] [ , [ max ] ] } の形式で指定します.

min で引数の最小個数を示します. デフォルト値はオプションが = で 指定されていれば 1, : で指定されていれば 0 です. min= / : セマンティクスを上書きすることに注意してください.

max で引数の最大個数を示します. 少なくとも min はなければなりません. もし max が省略されていてでもコンマは使われている場合, 受け取る引数の個数の上限はありません.

: type [ desttype ]

= と同様ですが引数が任意であることを示します. もし(引数が)省略された場合には文字列値オプションには空文字列が, 数値 オプションには 0 が設定されます.

もし文字列引数が - 若しくは -- から始まっているときには それ自身でオプションとされるので注意してください.

: number [ desttype ]

:i と同様ですが, 値が省略されたときに number が設定されます.

: + [ desttype ]

: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 の設定

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:

default

This option causes all configuration options to be reset to their default values.

posix_default

This option causes all configuration options to be reset to their default values as if the environment variable POSIXLY_CORRECT had been set.

auto_abbrev

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.

getopt_compat

Allow + to start options. Default is enabled unless environment variable POSIXLY_CORRECT has been set, in which case getopt_compat is disabled.

gnu_compat

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.

gnu_getopt

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().

require_order

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.

permute

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.

bundling (default: disabled)

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.

bundling_override (default: disabled)

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.

ignore_case (default: enabled)

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.

ignore_case_always (default: disabled)

When bundling is in effect, case is ignored on single-character options also.

Note: disabling ignore_case_always also disables ignore_case.

auto_version (default:disabled)

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.

auto_help (default:disabled)

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.

pass_through (default: disabled)

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.

prefix

The string that starts options. If a constant string is not sufficient, see prefix_pattern.

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 --|-.

long_prefix_pattern

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.

debug (default: disabled)

Enable debugging output.


エクスポート可能なメソッド

VersionMessage

This subroutine provides a standard version message. Its argument can be:

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
-msg

The text of a message to print immediately prior to printing the program's usage message.

-exitval

The 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() });
HelpMessage

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.


トラブルシューティング

オプションが渡されなかった時に GetOptions が偽を返さない

それは 'options(選択可能なもの)' だからです.

GetOptions がコマンドラインをちゃんと分解しない

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.

未定義の関数 &main::GetOptions が呼ばれました

Are you running Windows, and did you write

    use GetOpt::Long;

(note the capital 'O')?

"-?" オプションを Getopt::Long でどう扱えばいいですか?

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.

Getopt::Long - 高機能なコマンドラインオプション解析

索引

Getopt::Long - 高機能なコマンドラインオプション解析