getopt, getopts - スイッチの塊から1文字のスイッチを処理

目次


名前

getopt, getopts - スイッチの塊から1文字のスイッチを処理


概要

    use Getopt::Std;

    getopt('oDI');    # -o, -D & -I take arg.  Sets $opt_* as a side effect.
    getopt('oDI', \%opts);    # -o, -D & -I take arg.  Values in %opts
    getopts('oif:');  # -o & -i are boolean flags, -f takes an argument
		      # Sets $opt_* as a side effect.
    getopts('oif:', \%opts);  # options as above. Values in %opts

説明

getopt() 関数は, スイッチの塊から1文字のスイッチを処理します. 引数を取る全てのスイッチを含んだ文字列を1つの引数に渡します. 各スイッチが見つかるたびに, $opt_x (x はスイッチの名前です)に 引数があれば引数の値がそうでなければ1が設定されます. 引数を とるスイッチはスイッチと引数の間の空白文字があるかどうかを 気にしません.

getopts() 関数はこれを似たような物ですが, 認識するべき全ての スイッチのリストを渡す必要があります. もしコマンドライン上に 知らないスイッチが見つかったときには, ユーザに不明なスイッチが 渡されたことの警告が発せられます.

もしあなたのコードが正しく推奨通りに use strict 'vars' プラグマの元で実行されているのであれば, "our" を使って 変数の宣言を行う必要があります:

    our($opt_x, $opt_y);

グローバル変数が追加されることを好まない人のために, getopt() 及び getopts() は省略可能な2つめの引数としてハッシュ リファレンスを受け取ることが出来ます. ハッシュのキーは x (x は スイッチの名前です) で, キーの値は引数の値若しくは指定していなければ 1 になります.

プログラムでスイッチのようでそうではない引数を処理するために, 両関数とも引数 -- を見つけるとそこで処理を中断します. -- は @ARGV から取り除かれます.


--help 及び --version

もし - がスイッチ文字と認識されていなければ, getopts() は 引数 --help--version をサポートします. main::HELP_MESSAGE() 及び main::VERISON_MESSAGE が 定義されていれば, それらが呼び出されます. 引数には, 出力するファイルハンドル, オプションを処理しているパッケージの名前, そのバージョン, そしてスイッチ文字列が渡されます. 関数が未定義 だった場合には, 知的なメッセージが生成されます; よりそれっぽく するためには $main::VERSION を定義するとよいでしょう.

もしスクリプトの中に埋め込まれているドキュメント (pod形式, perlpod [CPAN] 参照)が認識されれば, --help はドキュメントに アクセスする方法も表示します.

過度にこだわるためには, $Getopt::Std::STANDARD_HELP_VERSION が 真でなければ(デフォルトは偽です), メッセージは STDERR に表示され, メッセージが出力された後も処理は継続します. これは標準的な振る舞い と反対となることから, $Getopt::Std::STANDARD_HELP_VERSION を 真に設定することを強く推奨します.

$Getopt::Std::OUTPUT_HELP_VERSION を設定することで出力する ファイルハンドルを変えることが出来ます. 関数 help_mess() 及び version_mess() を引数にスイッチ文字列を渡して呼び出すことで, --help--version で表示されるメッセージ(Usage:行以外)を 表示することが出来ます.


和訳

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

原典: perl VERSION 5.8.8. 翻訳日: 2006-10-09.

getopt, getopts - スイッチの塊から1文字のスイッチを処理

索引

getopt, getopts - スイッチの塊から1文字のスイッチを処理