2004年03月12日

GetOptions(2)

(1)の続き

前回、各foo、barそれぞれのオプションの引数を文字でとか数値でとかという風に書きましたが、実際は「オプション名=1文字」という書式で1文字の部分(記述子といいます)でどう処理するか決めています。
記述子の対応は以下のようになってます。

s文字列
i整数値(負の数を含む)
f実数値(負の数を含む)

また、オプション名と記述子の間はイコール(=)で結んでいましたがこれにも意味があり、=で結ぶとオプションの後に必ず対応する引数が必要になります。
もし、オプション名だけでも引数があっても良いようにしたい場合はイコールの部分をコロン(:)にします。

上記をふまえて前回最後のものを書き換えてみます。

use Getopt::Long;
GetOptions("foo:s","bar=f") || die("GetOptions failed");
print "$opt_foo/$opt_bar";
これを実行すると以下のようになります
perl test.pl -foo -bar 123.45
/123.45

perl test.pl -foo aaa -bar
Option b requires an argument
GetOptions failed at test.pl line 2.

それから、長いオプション名と短いオプション名の両方を使えるようにする方法もあります。
use Getopt::Long;
GetOptions("foo|f:s","bar|b=f") || die("GetOptions failed");
print "$opt_foo/$opt_bar";
上記のようにすると
perl test.pl -f aaa -b 123.45
としてもちゃんと「aaa/123.45」という値が表示されます。
なお、$opt_fと$opt_bには何も値が入りませんので注意してください。
(「|」で列記した場合「$opt_最初に記述したオプション名」という変数に必ず代入されます)

それから、

use Getopt::Long;
GetOptions("foo|f:s" => \$foo,"bar|b=f" => \$bar) || die("GetOptions failed");
print "$foo/$bar";
とすることで「$opt_なにがし」ではなく指定の変数にダイレクトに代入することも出来ます。

ここまで判ればリファレンスが読めるようになると思いますので、細かい点についてはそちらを参照してください。

Posted by Takuchan at 2004年03月12日 14:23 | トラックバック(0)