« ハーゲンダッツの | トップページ | さて何時の間にかADSLが開通しているわけですが »

2005.06.13

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です。呼ばないと引数なしオプションも認識されませんのでご注意を。

|
|

« ハーゲンダッツの | トップページ | さて何時の間にかADSLが開通しているわけですが »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/13747/4538545

この記事へのトラックバック一覧です: Getopt::Stdの真面目な解説:

« ハーゲンダッツの | トップページ | さて何時の間にかADSLが開通しているわけですが »