Getopt::Stdの真面目な解説
前の記事の解説はいかにも投げやりだったなぁ、ということで、自分用リファレンスも兼ねて、改めて解説を。まずは1文字オプションの為のモジュール、Getopt::Stdから。
例:-aと-bの2つの引数なしオプションと、-cという引数付きオプションを取る場合 stdtest.pl
use strict;
use Getopt::Std;
getopt('c');
our($opt_a,$opt_b,$opt_c);
if($opt_a)
{
print '-a is set',"\n";
}
else
{
print '-a is not set',"\n";
}
if($opt_b)
{
print '-b is set',"\n";
}
else
{
print '-b is not set',"\n";
}
print '-c is ',$opt_c,"\n";
で、perl stdtest.pl -a -b -c testとかしてやれば、
-a is set
-b is set
-c is test
と表示されるわけです。
で解説。まず引数を取るオプションをgetopt()関数の引数に列挙します。引数を取らないなら何もしなくてもOK。これだけで$opt_x(xはオプション名)に、引数を取る場合は引数が、引数を取らない場合はオプションがつけられているかどうかのbool値が入ります。
で、気をつけなければいけないのは、use strict環境下では$opt_xを参照する事ができないという事です。これを回避するために、使う変数をour宣言してやる必要があります。
ちなみにGetopt::Stdにはgetopts()という関数も用意されています。これを使う場合のコードはこんな感じです。
use strict;
use Getopt::Std;
getopts('abc:');
our($opt_a,$opt_b,$opt_c);
if($opt_a)
{
print '-a is set',"\n";
}
else
{
print '-a is not set',"\n";
}
if($opt_b)
{
print '-b is set',"\n";
}
else
{
print '-b is not set',"\n";
}
print '-c is ',$opt_c,"\n";
お分かりかもしれませんが、getopts()を使う場合は、引数を取らないオプションはそのまま、引数を取るオプションは:をつけて列挙する必要があります。ようするにどういう引数を取るかをより明示的にしたい場合はgetopts()を使う、というところでしょうか。
ちなみに、getopt()を使う場合で、引数なしのオプションのみを使いたい場合は、引数無しでgetopt()を呼べばOKです。呼ばないと引数なしオプションも認識されませんのでご注意を。
| 固定リンク
|

コメント