Getopt::Long - 高機能なコマンドラインオプション解析
Getopt::Long - Extended processing of command line options

目次 TABLE OF CONTENTS


名前 NAME

Getopt::Long - 高機能なコマンドラインオプション解析 Getopt::Long - Extended processing of command line options


概要 SYNOPSIS

  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

説明 DESCRIPTION

Getopt::Long モジュールは 洗練された getopt 関数, GetOptions() を 実装しています. この関数は GNU 拡張を共存しつつ POSIX 形式のコマンド ラインオプションの理念を引き継いでいます. 一般的にこのことは, オプションは一文字ではなく長い名前を持ち, 2つのダッシュ "--" で 始まります. 伝統的な一文字でのアプローチでよく見られるコマンドライン オプションを1つに束ねる使い方も, サポートはされていますがデフォルトでは 有効にされていません. The Getopt::Long module implements an extended getopt function called GetOptions(). This function adheres to the POSIX syntax for command line options, with GNU extensions. In general, this means that options have long names instead of single letters, and are introduced with a double dash "--". Support for bundling of command line options, as was the case with the more traditional single-letter approach, is provided but not enabled by default.


コマンドラインオプション, 導入 Command Line Options, an Introduction

コマンドラインで操作するプログラムは伝統的にその引数をコマンドライン から受け取ります. 例えばプログラムが知る必要のあるファイル名や その他の情報等です. 引数に加えて, これらのプログラムはしばしば おまけにコマンドラインオプションを受け取ります. オプションは プログラムの動作に必ずしも必要ではありません, 従って'オプション' という名前なのですが, しかしそのデフォルトの振る舞いを変更するために 使用されます. 例えばあるプログラムはそのジョブを静かに行いますが, 適切なオプションを渡すことでそれが何をしているかに関して事細かに 情報を提供したりするでしょう. Command line operated programs traditionally take their arguments from the command line, for example filenames or other information that the program needs to know. Besides arguments, these programs often take command line options as well. Options are not necessary for the program to work, hence the name 'option', but are used to modify its default behaviour. For example, a program could do its job quietly, but with a suitable option it could provide verbose information about what it did.

コマンドラインオプションには幾つかの種類があります. 伝統的に, これらは1つのダッシュで始まり1つの文字からなります. Command line options come in several flavours. Historically, they are preceded by a single dash -, and consist of a single letter.

    -l -a -c

大抵は, これらの1文字のオプションはまとめることが出来ます: Usually, these single-character options can be bundled:

    -lac

オプションはあたりを持つこともあります. オプションはオプション文字 の後に配置されます. その間に空白が置かれることもありますが, 置かれないこともあります: Options can have values, the value is placed after the option character. Sometimes with whitespace in between, sometimes not:

    -s 24 -s24

これらのオプションはとても不可解な性質だったため, 長い名前を使用する 別の形式が開発されました. 不可解な -l の代わりにより説明的な --long を使うことが出来るようになりました. 束になった1文字 オプションと長い名前のオプションとを区別するために, オプション名には 2つのダッシュが使われました. 長い名前のオプションの初期の実装では プラス記号 + が使われることもありました. またオプションの値は 次の2つの書き方があります: Due to the very cryptic nature of these options, another style was developed that used long names. So instead of a cryptic -l one could use the more descriptive --long. To distinguish between a bundle of single-character options and a long one, two dashes are used to precede the option name. Early implementations of long options used a plus + instead. Also, option values could be specified either like

    --size=24

若しくは or

    --size 24

+ 形式は今では廃止され, 使わないことが強く推奨されています. The + form is now obsolete and strongly deprecated.


Getopt::Long 事始め Getting Started with Getopt::Long

Getopt::Long は newgetopt.pl の Perl5 後継です. これは新しい 形式のコマンドラインオプションをサポートする最初の Perl モジュール でした. それ故 Getopt::Long の名前です. このモジュールは1文字の オプションとその合成もサポートしています. 1文字のオプションは 任意のアルファベット文字, 疑問符, そしてダッシュのいずれかでしょう. 長いオプションは文字、数字、そしてダッシュからなります. これは今のところ Getopt::Long では強制されていませんが, 連続する 複数のダッシュは許可されていません. そしてオプション名はダッシュで 終わってはなりません. Getopt::Long is the Perl5 successor of newgetopt.pl. This was the first Perl module that provided support for handling the new style of command line options, hence the name Getopt::Long. This module also supports single-character options and bundling. Single character options may be any alphabetic character, a question mark, and a dash. Long options may consist of a series of letters, digits, and dashes. Although this is currently not enforced by Getopt::Long, multiple consecutive dashes are not allowed, and the option name must not end with a dash.

Getopt::Long を Perl プログラムから使うときには, 次の行を Perl プログラムに記述します. To use Getopt::Long from a Perl program, you must include the following line in your Perl program:

    use Getopt::Long;

これは Getopt::Long モジュールのコアをロードし, プログラムが それを使う準備をします. Getopt::Long の実際のコードの多くは そこで準備された関数のいずれかを実際に呼び出すまではロード されません. This will load the core of the Getopt::Long module and prepare your program for using it. Most of the actual Getopt::Long code is not loaded until you really call one of its functions.

デフォルトの設定では, オプション名はユニークな限りで省略可能で, 大文字小文字を区別せず, 長い名前のオプションであっても1つのダッシュで 利用できます. そして, オプションはオプションでない引数の間に 配置することも出来ます. Getopt::Long を設定する方法の詳細は, "Getopt::Long の設定" を参照してください. In the default configuration, options names may be abbreviated to uniqueness, case does not matter, and a single dash is sufficient, even for long option names. Also, options may be placed between non-option arguments. See "Configuring Getopt::Long" for more details on how to configure Getopt::Long.

簡単なオプション Simple options

一番簡単なオプションは値を撮らないオプションでしょう. それはコマンドラインに存在するだけでオプションを有効にします. よく使われる例です: The most simple options are the ones that take no values. Their mere presence on the command line enables the option. Popular examples are:

    --all --verbose --quiet --debug

単純なオプションは処理するのも簡単です: Handling simple options is straightforward:

    my $verbose = '';	# option variable with default value (false)
    my $all = '';	# option variable with default value (false)
    GetOptions ('verbose' => \$verbose, 'all' => \$all);

GetOptions() の呼び出しは @ARGV で提供されるコマンドライン引数 を解析し, オプションがコマンドラインにあればオプション変数に値 1 を 設定します. そうでなければオプション変数にはふれられません. オプション値を真に設定することをしばしばオプションを有効にすると 呼びます. The call to GetOptions() parses the command line arguments that are present in @ARGV and sets the option variable to the value 1 if the option did occur on the command line. Otherwise, the option variable is not touched. Setting the option value to true is often called enabling the option.

GetOptions() 関数に指示したオプション名はオプション指定(specification) と呼ばれます. 後ほどこの指定が単なるオプション名以上の意味があることを 知るでしょう. 変数へのリファレンスはオプション格納先(destination)と 呼びます. The option name as specified to the GetOptions() function is called the option specification. Later we'll see that this specification can contain more than just the option name. The reference to the variable is called the option destination.

GetOptions() はコマンドラインを正常に処理したときに真を返します. そうでなければ STDERR にエラーメッセージを書き出して偽を返します. GetOptions() will return a true value if the command line could be processed successfully. Otherwise, it will write error messages to STDERR, and return a false result.

幾分簡単じゃなくなったオプション A little bit less simple options

Getopt::Long は簡単なオプションの2つの変種をサポートしています: 反転 オプションと 増分(incremental) オプションです. Getopt::Long supports two useful variants of simple options: negatable options and incremental options.

反転オプションはオプション名の後に 感嘆符 ! をつけることで指定します. A negatable option is specified with an exclamation mark ! after the option name:

    my $verbose = '';	# option variable with default value (false)
    GetOptions ('verbose!' => \$verbose);

さて, コマンドラインでの --verbose$verbose を有効にします. しかし --noverbose を使うことでその値を 0 に設定し $verbose を無効にすることも出来ます. 適切なデフォルト値を使うことでプログラムは $verbose がデフォルトで偽なのか, それとも --noverbose を 使うことで無効にするのかを選ぶことが出来ます. Now, using --verbose on the command line will enable $verbose, as expected. But it is also allowed to use --noverbose, which will disable $verbose by setting its value to 0. Using a suitable default value, the program can find out whether $verbose is false by default, or disabled by using --noverbose.

増分オプションはオプション名の後にプラス記号 + をつけることで 指定します: An incremental option is specified with a plus + after the option name:

    my $verbose = '';	# option variable with default value (false)
    GetOptions ('verbose+' => \$verbose);

コマンドラインで --verbose を使うと $verbose の値が増加 されます. これによってプログラムはコマンドラインにオプションが 何回指定されたかを追跡することが出来ます. 例えば --verbose が 出現する毎にプログラムのログの詳細レベルを増加させることが出来ます. Using --verbose on the command line will increment the value of $verbose. This way the program can keep track of how many times the option occurred on the command line. For example, each occurrence of --verbose could increase the verbosity level of the program.

コマンドラインオプションと他の引数の混在 Mixing command line option with other arguments

通常プログラムは他の引数, 例えばファイル名と同じようにしてコマンド ラインオプションを受け取ります. 常に先にオプションを指定して それ以外の引数を最後に置くのはよい習慣です. Getopt::Long は, しかしながらオプションと引数とを混在させて引数の残りをプログラムに 渡す前に全てのオプションを'濾過'することを可能にしています. Getopt::Long が後ろの引数を処理してしまうのを止めるには, コマンドラインに2重のダッシュ -- を挟みます: Usually programs take command line options as well as other arguments, for example, file names. It is good practice to always specify the options first, and the other arguments last. Getopt::Long will, however, allow the options and arguments to be mixed and 'filter out' all the options before passing the rest of the arguments to the program. To stop Getopt::Long from processing further arguments, insert a double dash -- on the command line:

    --size 24 -- --all

この例では, --all はオプションとしては扱われません. そして @ARGV の中で無傷のままプログラムに渡されます. In this example, --all will not be treated as an option, but passed to the program unharmed, in @ARGV.

値を取るオプション Options with values

オプションが値を受け取るにはそのオプションの値が必須であるかそうで ないのか, そしてどんな種類の値を想定しているのかを指定しなければ なりません. For options that take values it must be specified whether the option value is required or not, and what kind of value the option expects.

3種類の値がサポートされています: 整数値, 浮動小数点値, そして文字列. Three kinds of values are supported: integer numbers, floating point numbers, and strings.

オプション値を必要と指定のなら, Getopt::Long はオプションに続く コマンドライン引数をオプション変数に代入します. もし, しかしながら, オプション値が任意と指定されているのなら, 値がコマンドライン引数ぽく ないときにのみこれを行います. If the option value is required, Getopt::Long will take the command line argument that follows the option and assign this to the option variable. If, however, the option value is specified as optional, this will only be done if that value does not look like a valid command line option itself.

    my $tag = '';	# option variable with default value
    GetOptions ('tag=s' => \$tag);

オプション指定において, オプション名の後に等号 = と文字 s を 続けます. 等号はこのオプションが値を要求していることを示します. 文字 s はこの値が任意の文字列であることを示します. 他には 整数値には i を, 浮動小数点値には f を指定できます. 等号の代わりにコロン : を使うことでオプション値が任意にもできます. このとき適切な値が指定されなかったときには文字列値オプションには 空文字列 '' が, 数値オプションには 0 が設定されます. In the option specification, the option name is followed by an equals sign = and the letter s. The equals sign indicates that this option requires a value. The letter s indicates that this value is an arbitrary string. Other possible value types are i for integer values, and f for floating point values. Using a colon : instead of the equals sign indicates that the option value is optional. In this case, if no suitable value is supplied, string valued options get an empty string '' assigned, while numeric options are set to 0.

複数の値を取るオプション Options with multiple values

オプションは幾つかの値を受け取ることもあります. 例えば, プログラムは ライブラリファイルを探すために複数のディレクトリを使うかもしれません: Options sometimes take several values. For example, a program could use multiple directories to search for library files:

    --library lib/stdlib --library lib/extlib

この振る舞いを達成するにはオプションの格納先に配列へのリファレンスを 指定するだけです: To accomplish this behaviour, simply specify an array reference as the destination for the option:

    GetOptions ("library=s" => \@libfiles);

それ以外でも, (型の指定の後に) "@" を追加することでオプションは 複数の値を取ることを指定でき, スカラーへのリファレンスを格納先に 渡すことが出来ます. Alternatively, you can specify that the option can have multiple values by adding a "@", and pass a scalar reference as the destination:

    GetOptions ("library=s@" => \$libfiles);

この例においては, @libfiles (もしくは @$libfiles) には 二つの完全な文字列: "lib/srdlib" 及び "lib/extlib" が この順番で格納されます. 整数値のみ若しくは浮動小数点値のみが 許容される値であると指定することも出来ます. Used with the example above, @libfiles (or @$libfiles) would contain two strings upon completion: "lib/srdlib" and "lib/extlib", in that order. It is also possible to specify that only integer or floating point numbers are acceptable values.

オプションを複数回描くのと同様にコンマで区切った値のリストを 許可すると便利なこともあります. これは Perl の split() 及び join() を使うことで簡単に行えます. Often it is useful to allow comma-separated lists of values as well as multiple occurrences of the options. This is easy using Perl's split() and join() operators:

    GetOptions ("library=s" => \@libfiles);
    @libfiles = split(/,/,join(',',@libfiles));

もちろん, 目的に合わせた適切な区切り文字を選ぶことが重要です. Of course, it is important to choose the right separator string for each purpose.

警告: 以下の記述は実験的な機能(experimental feature)です. Warning: What follows is an experimental feature.

オプションは一度に複数の値を取ることも出来ます, 例えば: Options can take multiple values at once, for example

    --coordinates 52.2 16.4 --rgbcolor 255 255 149

これはオプション指定に繰り返し指定を加えることで行えます. 繰り返し指定は正規表現パターンで使う {...} 繰り返し指定ととても よく似ています. 例えば先ほどのコマンドラインは次の指定で扱えます: This can be accomplished by adding a repeat specifier to the option specification. Repeat specifiers are very similar to the {...} repeat specifiers that can be used with regular expression patterns. For example, the above command line would be handled as follows:

    GetOptions('coordinates=f{2}' => \@coor, 'rgbcolor=i{3}' => \@color);

オプションの格納先は配列もしくは配列へのリファレンスではければ なりません. The destination for the option must be an array or array reference.

オプションが受け取る最小と最大の個数を指定することも出来ます. foo=s{2,4} は少なくとも2つのそして最大4個の引数を受け取る オプションを示します. foo=s{,} は1つ以上の値を示し, foo:s{,} は 0個以上の値を示します. It is also possible to specify the minimal and maximal number of arguments an option takes. foo=s{2,4} indicates an option that takes at least two and at most 4 arguments. foo=s{,} indicates one or more values; foo:s{,} indicates zero or more option values.

ハッシュ値を取るオプション Options with hash values

もしオプションの格納先がハッシュへのリファレンスだったときには, オプションはその値として key=value の形式の文字列を 受け取ります. この値はそのキーでハッシュに格納されます. If the option destination is a reference to a hash, the option will take, as value, strings of the form key=value. The value will be stored with the specified key in the hash.

    GetOptions ("define=s" => \%defines);

次の形式も可能です: Alternatively you can use:

    GetOptions ("define=s%" => \$defines);

次のコマンドラインオプションを受け取ったとします: When used with command line options:

    --define os=linux --define vendor=redhat

ハッシュ %defines (若しくは %$defines) には2つのキーが格納され, "os" には値 "linux" が, "vendor" には値 "redhat" が格納されます. 整数値のみ若しくは浮動小数点値のみが許容される値であると指定することも 出来ます. キーには常に文字列が取られます. the hash %defines (or %$defines) will contain two keys, "os" with value "linux and "vendor" with value "redhat". It is also possible to specify that only integer or floating point numbers are acceptable values. The keys are always taken to be strings.

オプションを処理するユーザ定義関数 User-defined subroutines to handle options

オプション格納先として関数(若しくは無名関数)へのリファレンスを設置 することで, オプションがコマンドラインに出現したとき(実際に毎回)処理 されるべき事の完全な制御を行うことが出来ます. GetOptions() が オプションに遭遇したとき, その関数が2つ若しくは3つの引数で 呼び出されます. 最初の引数はオプション名です. 格納先がスカラー 若しくは配列の場合には2つめの引数は格納される値です. 格納先がハッシュの場合には2つめの引数はハッシュのキーで, 3つめの 引数は格納される値です. 値を格納するか, 適切な何かを行うかは 関数次第です. Ultimate control over what should be done when (actually: each time) an option is encountered on the command line can be achieved by designating a reference to a subroutine (or an anonymous subroutine) as the option destination. When GetOptions() encounters the option, it will call the subroutine with two or three arguments. The first argument is the name of the option. For a scalar or array destination, the second argument is the value to be stored. For a hash destination, the second arguments is the key to the hash, and the third argument the value to be stored. It is up to the subroutine to store the value, or do whatever it thinks is appropriate.

このメカニズムの簡単な例は相互に関連するオプションの実装です. 以下は例です: A trivial application of this mechanism is to implement options that are related to each other. For example:

    my $verbose = '';	# option variable with default value (false)
    GetOptions ('verbose' => \$verbose,
	        'quiet'   => sub { $verbose = 0 });

ここで --verbose 及び --quiet は同じ変数 $verbose を 制御しますがその値は正反対の物です. Here --verbose and --quiet control the same variable $verbose, but with opposite values.

もし関数がエラーを発生させる必要があるなら希望のエラーメッセージを引数 として die() を呼んでください. GetOptions() は die() をキャッチして, エラーメッセージを発行し, 終了時に返されるエラーとして記録します. If the subroutine needs to signal an error, it should call die() with the desired error message as its argument. GetOptions() will catch the die(), issue the error message, and record that an error result must be returned upon completion.

エラーメッセージのテキストが感嘆符!で始まる時は GetOptions() によって 特別に処理されます. 現時点では1つの特殊コマンドが実装されています: die("!FINISH") はあたかも2重のダッシュ -- に遭遇したかのように その場でオプションの処理を停止させます. If the text of the error message starts with an exclamation mark ! it is interpreted specially by GetOptions(). There is currently one special command implemented: die("!FINISH") will cause GetOptions() to stop processing options, as if it encountered a double dash --.

複数の名前を持つオプション Options with multiple names

オプションに覚えやすい別名を提供することが親切なこともあります. 例えば --height--length の別名を持つ等です. 別名は垂直線文字 | で区切ってオプション指定の中に含めることが 出来ます. いまの例を記述すると次のようになります: Often it is user friendly to supply alternate mnemonic names for options. For example --height could be an alternate name for --length. Alternate names can be included in the option specification, separated by vertical bar | characters. To implement the above example:

    GetOptions ('length|height=f' => \$length);

1つめの名前はプライマリ名と呼ばれ, それ以外は別名 と呼ばれます. ハッシュにオプションを格納するときには常にプライマリ名が使われます. The first name is called the primary name, the other names are called aliases. When using a hash to store options, the key will always be the primary name.

複数の別名を指定することも出来ます. Multiple alternate names are possible.

大文字小文字と略語 Case and abbreviations

追加で設定をしなければ, GetOptions() はオプション名の大文字小文字を 無視します. そしてユニークな範囲で省略することも許します. Without additional configuration, GetOptions() will ignore the case of option names, and allow the options to be abbreviated to uniqueness.

    GetOptions ('length|height=f' => \$length, "head" => \$head);

この指定において, --l 及び --L は length オプションとして 有効です. しかし head 及び height オプションに対しては少なくとも --hea 及び --hei が必要です. This call will allow --l and --L for the length option, but requires a least --hea and --hei for the head and height options.

オプション指定方法の概要 Summary of Option Specifications

各オプション指定は2つの部分からなります: 名前指定及び引数指定. Each option specifier consists of two parts: the name specification and the argument specification.

名前指定にはオプションの名前が入ります. 任意で垂直線文字で区切られた 別名のリストも指定できます. The name specification contains the name of the option, optionally followed by a list of alternative names separated by vertical bar characters.

    length	      option name is "length"
    length|size|l     name is "length", aliases are "size" and "l"

引数指定は省略可能です. 省略時にはオプションは真偽値として扱われ, コマンドラインでオプションが使用されたときには値 1 が設定されます. The argument specification is optional. If omitted, the option is considered boolean, a value of 1 will be assigned when the option is used on the command line.

引数指定は以下の形式を取ることが出来ます: The argument specification can be

!

オプションは引数を取らず, "no" もしくは "no-" で前置することで反転されます. 例えば "foo!"--nofoo 及び --no-foo (値 0 が設定されます) と同様に --foo (値 1 が設定されます) を許可します. もしオプションが 別名を持っていれば別名にも同様に適用されます. The option does not take an argument and may be negated by prefixing it with "no" or "no-". E.g. "foo!" will allow --foo (a value of 1 will be assigned) as well as --nofoo and --no-foo (a value of 0 will be assigned). If the option has aliases, this applies to the aliases as well.

合成が有効なときに1文字オプションに反転を適用するのは筋の通らない (pointless) ことであり, 警告が発せられます. Using negation on a single letter option when bundling is in effect is pointless and will result in a warning.

+

オプションは引数を取らず, コマンドラインに現れるたびに 1 ずつ インクリメントしていきます. 例えば "more+" で の指定で --more --more --more の引数を与えると3回増加され値 3 となります (初期値が 0 若しくは未定義だったとき). The option does not take an argument and will be incremented by 1 every time it appears on the command line. E.g. "more+", when used with --more --more --more, will increment the value three times, resulting in a value of 3 (provided it was 0 or undefined at first).

+ 指定は格納先がスカラーでなかったときには無視されます. The + specifier is ignored if the option destination is not a scalar.

= type [ desttype ] [ repeat ]

このオプションは与えられた形式の引数を要求します. サポートされている形式は以下の通りです: The option requires an argument of the given type. Supported types are:

s

文字列. 任意の文字の集合. --- から始まる引数も有効です. String. An arbitrary sequence of characters. It is valid for the argument to start with - or --.

i

整数. 数値列の前に任意で正符号もしくは負符号をおけます. Integer. An optional leading plus or minus sign, followed by a sequence of digits.

o

拡張整数, Perl形式. 任意で正符号もしくは負符号が前置されている 数字列, 若しくは8進数(0 に続けて任意の '0', '1', .. '7'), もしくは16進数 (0x に続けて '0' .. '9', 'a' .. 'f', 大文字小文字は区別しない) もしくは2進数 (0b に続けて '0' か '1' の列). Extended integer, Perl style. This can be either an optional leading plus or minus sign, followed by a sequence of digits, or an octal string (a zero, optionally followed by '0', '1', .. '7'), or a hexadecimal string (0x followed by '0' .. '9', 'a' .. 'f', case insensitive), or a binary string (0b followed by a series of '0' and '1').

f

実数. 例えば 3.14, -6.23E24 等. Real number. For example 3.14, -6.23E24 and so on.

desttype にはオプションがリストかハッシュかに応じて @ 若しくは % を指定することが出来ます. これはオプション値の格納先が 他に指定されていない時にのみ必要です. 必要なければ省略するべきです. The desttype can be @ or % to specify that the option is list or a hash valued. This is only needed when the destination for the option value is not otherwise specified. It should be omitted when not needed.

repeat にはコマンドラインでこのオプションが受け取る値の個数を 指定します. { [ min ] [ , [ max ] ] } の形式で指定します. The repeat specifies the number of values this option takes per occurrence on the command line. It has the format { [ min ] [ , [ max ] ] }.

min で引数の最小個数を示します. デフォルト値はオプションが = で 指定されていれば 1, : で指定されていれば 0 です. min= / : セマンティクスを上書きすることに注意してください. min denotes the minimal number of arguments. It defaults to 1 for options with = and to 0 for options with :, see below. Note that min overrules the = / : semantics.

max で引数の最大個数を示します. 少なくとも min はなければなりません. もし max が省略されていてでもコンマは使われている場合, 受け取る引数の個数の上限はありません. max denotes the maximum number of arguments. It must be at least min. If max is omitted, but the comma is not, there is no upper bound to the number of argument values taken.

: type [ desttype ]

= と同様ですが引数が任意であることを示します. もし(引数が)省略された場合には文字列値オプションには空文字列が, 数値 オプションには 0 が設定されます. Like =, but designates the argument as optional. If omitted, an empty string will be assigned to string values options, and the value zero to numeric options.

もし文字列引数が - 若しくは -- から始まっているときには それ自身でオプションとされるので注意してください. Note that if a string argument starts with - or --, it will be considered an option on itself.

: number [ desttype ]

:i と同様ですが, 値が省略されたときに number が設定されます. Like :i, but if the value is omitted, the number will be assigned.

: + [ desttype ]

:i と同様ですが, 値が省略されるときにオプションの値が増加されます. Like :i, but if the value is omitted, the current value for the option will be incremented.


高度な可能性 Advanced Possibilities

オブジェクト指向インターフェース Object oriented interface

Getopt::Long はオブジェクト指向的にも利用できます: Getopt::Long can be used in an object oriented way as well:

    use Getopt::Long;
    $p = new Getopt::Long::Parser;
    $p->configure(...configuration options...);
    if ($p->getoptions(...options descriptions...)) ...

設定オプションはコンストラクターに渡すこともできます. Configuration options can be passed to the constructor:

    $p = new Getopt::Long::Parser
             config => [...configuration options...];

スレッド安全性 Thread Safety

Getopt::Long は, Perl 5.8 の ithreads 環境においてスレッドセーフです. (実験的であり現在は非推奨の)Perl 5.005 threads実装 ではスレッドセーフ ではありません. Getopt::Long is thread safe when using ithreads as of Perl 5.8. It is not thread safe when using the older (experimental and now obsolete) threads implementation that was added to Perl 5.005.

ドキュメントとヘルプテキスト Documentation and help texts

Getopt::Long はヘルプメッセージの生成に Pod::Usage を利用することを おすすめします. 使用例: Getopt::Long encourages the use of Pod::Usage to produce help messages. For example:

    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] 参照. See Pod::Usage [CPAN] for details.

オプションをハッシュに格納 Storing option values in a hash

時々, 例えば多くのオプションがある時などに, それぞれ別々の 変数を用意することは面倒なことです. そこで GetOptions() ではもう 1つのメカニズム, オプションのハッシュへの格納をサポートしています. Sometimes, for example when there are a lot of options, having a separate variable for each of them can be cumbersome. GetOptions() supports, as an alternative mechanism, storing options in a hash.

この機能を利用するには, ハッシュへのリファレンスを GetOptions() の 最初の引数として渡します. コマンドラインで指定されたそれぞれの オプションは, オプション名をキーとしてハッシュに格納されます. コマンドラインで実際には使われなかったオプションはハッシュには 置かれません. 言い換えると, オプションが使われたかどうかは exists($h{option}) (もしくは defined()) でテストすることが できます. この方法の欠点は, $h{option} を exists() や defined() で 確認なしに使うと, use warnings の環境下では警告がでてしまうことです. To obtain this, a reference to a hash must be passed as the first argument to GetOptions(). For each option that is specified on the command line, the option value will be stored in the hash with the option name as key. Options that are not actually used on the command line will not be put in the hash, on other words, exists($h{option}) (or defined()) can be used to test if an option was used. The drawback is that warnings will be issued if the program runs under use strict and uses $h{option} without testing with exists() or defined() first.

    my %h = ();
    GetOptions (\%h, 'length=i');	# will store in $h{length}

リストやハッシュ値をとるオプションでは, @ 若しくは % を型の後に 追加する必要があります. For options that take list or hash values, it is necessary to indicate this by appending an @ or % sign after the type:

    GetOptions (\%h, 'colours=s@');	# will push to @{$h{colours}}

さらに複雑なことに, ハッシュには実際に値を格納する先へのリファレンスを 置くことができます. 例えば: To make things more complicated, the hash may contain references to the actual destinations, for example:

    my $len = 0;
    my %h = ('length' => \$len);
    GetOptions (\%h, 'length=i');	# will store in $len

これは次の例を全く等価です: This example is fully equivalent with:

    my $len = 0;
    GetOptions ('length=i' => \$len);	# will store in $len

混在も可能です. 例えばよく利用するオプションは変数に, それ以外のオプションはハッシュの中に置くこともできます: Any mixture is possible. For example, the most frequently used options could be stored in variables while all other options get stored in the hash:

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

オプションの合成 Bundling

合成を使うことで, 複数の1文字のオプションを一度に指定することが できます. 例えば, a, v, x が有効なオプションであれば, With bundling it is possible to set several single-character options at once. For example if a, v and x are all valid options,

    -vax

は3つ全てを設定します. would set all three.

Getopt::Long は2段階の合成を提供しています. 合成を有効に するためには Getopt::Long::Configure を呼び出す必要があります. Getopt::Long supports two levels of bundling. To enable bundling, a call to Getopt::Long::Configure is required.

合成の1レベル目は以下の呼び出しで有効に出来ます: The first level of bundling can be enabled with:

    Getopt::Long::Configure ("bundling");

これが設定されると, 1文字のオプションは合成されますが長い オプションは曖昧さを回避するために常に二重のダッシュ -- で 呼び出す必要があります. 例えば, vax, a, v, x が 全て有効なオプションの時, Configured this way, single-character options can be bundled but long options must always start with a double dash -- to avoid ambiguity. For example, when vax, a, v and x are all valid options,

    -vax

a, v そして x を設定しますが, would set a, v and x, but

    --vax

vax を設定します. would set vax.

合成の2レベル目ではこの制限を取り除きます. 次の呼び出して有効に できます: The second level of bundling lifts this restriction. It can be enabled with:

    Getopt::Long::Configure ("bundling_override");

これで, -vax はオプション vax を設定するようになります. Now, -vax would set the option vax.

いずれかのレベルの合成が有効になると, オプションの値は 合成の中に入れることも出来ます. 例えば: When any level of bundling is enabled, option values may be inserted in the bundle. For example:

    -h24w80

は次と等価です. is equivalent to

    -h 24 -w 80

合成を設定したときには, 長いオプションは大文字小文字の区別が ないのにもかかわらず1文字のオプションは大文字小文字を区別 します. 1文字のオプションを同様に大文字小文字の区別を なくすためには次のようにします: When configured for bundling, single-character options are matched case sensitive while long options are matched case insensitive. To have the single-character options matched case insensitive as well, use:

    Getopt::Long::Configure ("bundling", "ignorecase_always");

It goes without saying that bundling can be quite confusing. これは当然, スイッチ合成がとても混乱することになります.

孤立したダッシュ The lonesome dash

通常, コマンドラインの孤独なダッシュ - はオプションとして 認識されません. オプションの処理は("permute" が設定されて いなければ)終了し, ダッシュは @ARGV に残ります. Normally, a lone dash - on the command line will not be considered an option. Option processing will terminate (unless "permute" is configured) and the dash will be left in @ARGV.

孤独なダッシュに対して特殊な処理を行うことも可能です. これは オプション仕様に空の名前を渡すことで行います, 例えば: It is possible to get special treatment for a lone dash. This can be achieved by adding an option specification with an empty name, for example:

    GetOptions ('' => \$stdio);

コマンドライン孤独なダッシュは正しいオプションになり, それを 使うことで変数 $stdio が設定されます. A lone dash on the command line will now be a legal option, and using it will set variable $stdio.

引数コールバック Argument callback

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

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.


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

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

復帰値とエラー Return values and Errors

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


遺物 Legacy

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

デフォルトの格納先 Default destinations

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);

開始記号の変更 Alternative option starters

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.

設定変数 Configuration variables

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.


トラブルシューティング Trouble Shooting

オプションが渡されなかった時に GetOptions が偽を返さない GetOptions does not return a false result when an option is not supplied

それは 'options(選択可能なもの)' だからです. That's why they're called 'options'.

GetOptions がコマンドラインをちゃんと分解しない GetOptions does not split the command line correctly

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 が呼ばれました Undefined subroutine &main::GetOptions called

Are you running Windows, and did you write

    use GetOpt::Long;

(note the capital 'O')?

"-?" オプションを Getopt::Long でどう扱えばいいですか? How do I put a "-?" option into a 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

著者 AUTHOR

Johan Vromans <jvromans@squirrel.nl>


著作権及び免責事項 COPYRIGHT AND DISCLAIMER

This program is Copyright 1990,2005 by Johan Vromans. このプログラムはフリーソフトウェアです. あなたは Perl Artistic License もしくは Free Software Foundation による GNU General Public License バージョン2若しくは(望むのなら)それ以降の元で再配布及び改変を 行うことができます. This program is Copyright 1990,2005 by Johan Vromans. This program is free software; you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

このプログラムは役に立つことを祈って配布されていますが, 一切の保証はされません. いかなる需要や特定目的への適合している 保証さえもありません. 詳細は GNU General Public License を 参照してください. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

もし GNU General Public License のコピーを持っていないのなら, the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA 宛に手紙を送るとよいでしょう. If you do not have a copy of the GNU General Public License write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


和訳 TRANSALTE TO JAPANESE

 山科 氷魚 (YAMASHINA Hio) <hio@hio.jp>

原典: perl VERSION 5.8.8. 翻訳日: 2006-08-04. Origlnal distribution is perl VERSION 5.8.8. Translated at 2006-08-04.

Getopt::Long - 高機能なコマンドラインオプション解析
Getopt::Long - Extended processing of command line options

索引 INDEX

Getopt::Long - 高機能なコマンドラインオプション解析
Getopt::Long - Extended processing of command line options