目次 TABLE OF CONTENTS
Getopt::Long - 高機能なコマンドラインオプション解析 Getopt::Long - Extended processing of command line options
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つに束ねる使い方も, サポートはされていますがデフォルトでは 有効にされていません. 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 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 は 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.
一番簡単なオプションは値を撮らないオプションでしょう. それはコマンドラインに存在するだけでオプションを有効にします. よく使われる例です: 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.
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.
通常プログラムは他の引数, 例えばファイル名と同じようにしてコマンド
ラインオプションを受け取ります. 常に先にオプションを指定して
それ以外の引数を最後に置くのはよい習慣です. 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.
オプションが値を受け取るにはそのオプションの値が必須であるかそうで ないのか, そしてどんな種類の値を想定しているのかを指定しなければ なりません. 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 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.
もしオプションの格納先がハッシュへのリファレンスだったときには,
オプションはその値として 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.
オプション格納先として関数(若しくは無名関数)へのリファレンスを設置 することで, オプションがコマンドラインに出現したとき(実際に毎回)処理 されるべき事の完全な制御を行うことが出来ます. 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 --.
オプションに覚えやすい別名を提供することが親切なこともあります.
例えば --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.
追加で設定をしなければ, 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.
各オプション指定は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.
このオプションは与えられた形式の引数を要求します. サポートされている形式は以下の通りです: The option requires an argument of the given type. Supported types are:
文字列. 任意の文字の集合. - や -- から始まる引数も有効です.
String. An arbitrary sequence of characters. It is valid for the
argument to start with - or --.
整数. 数値列の前に任意で正符号もしくは負符号をおけます. Integer. An optional leading plus or minus sign, followed by a sequence of digits.
拡張整数, 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').
実数. 例えば 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.
= と同様ですが引数が任意であることを示します.
もし(引数が)省略された場合には文字列値オプションには空文字列が, 数値
オプションには 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.
:i と同様ですが, 値が省略されたときに number が設定されます.
Like :i, but if the value is omitted, the number will be assigned.
:i と同様ですが, 値が省略されるときにオプションの値が増加されます.
Like :i, but if the value is omitted, the current value for the
option will be incremented.
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...];
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.
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.
時々, 例えば多くのオプションがある時などに, それぞれ別々の 変数を用意することは面倒なことです. そこで 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 ... }
合成を使うことで, 複数の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. これは当然, スイッチ合成がとても混乱することになります.
通常, コマンドラインの孤独なダッシュ - はオプションとして
認識されません. オプションの処理は("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.
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
-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() });
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(選択可能なもの)' だからです. That's why they're called '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若しくは(望むのなら)それ以降の元で再配布及び改変を 行うことができます. 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.
山科 氷魚 (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.