2013年もGetopt::Long(前編)

という訳で、最近、使い始めたので自分用のメモを作ろうと思う。
とは言うものの、すでにちゃんとした記事が存在するので、
逆引き的なアレを書く感じで。

参考にしたページ

2013年のGetopt::Long – おそらくはそれさえも平凡な日々
http://www.songmu.jp/riji/archives/2013/02/2013getoptlong.html

 
とりあえず、使ってみる

use strict;
use warnings;
use v5.10;

use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/;

my $res = GetOptions(
    hoge => \my $hoge
);

say 'hoge = ', $hoge;
say 'res  = ', $res;

上記のソースを”aaa.pl”に保存して、
以下のように実行すると、
$ perl aaa.pl
Use of uninitialized value $hoge in say at aaa.pl line 11.
hoge =
res = 1

次は、こんな感じで実行すると、bundlingを指定しているので以下の通り。
$ perl aaa.pl -hoge
Unknown option: h
Unknown option: o
Unknown option: g
Unknown option: e
Use of uninitialized value $hoge in say at aaa.pl line 11.
hoge =
res =

メッセージの通り、
$ perl aaa.pl -h -o -g -e
と同じなので、以下のように実行する。
$ perl aaa.pl --hoge
hoge = 1
res = 1

 
オプションに指定した引数を受け取る

use strict;
use warnings;
use v5.10;

use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/;

my $res = GetOptions(
    'hoge=s' => \my $hoge
);

say 'hoge = ', $hoge;
say 'res  = ', $res;

上記のソースを”bbb.pl”に保存して、
以下のように実行すると、
$ perl bbb.pl --hoge
Option hoge requires an argument
Use of uninitialized value $hoge in say at bbb.pl line 11.
hoge =
res =

‘aaa’とい文字列を渡すには、
$ perl bbb.pl --hoge=aaa
hoge = aaa
res = 1

もしくは、このように実行する。
$ perl bbb.pl --hoge aaa
hoge = aaa
res = 1

'hoge=s''hoge=i'にすると、整数以外は渡せなくなる。
スクリプトを変更して、”ccc.pl”に保存すると、
$ perl ccc.pl --hoge aaa
Value "aaa" invalid for option hoge (number expected)
Use of uninitialized value $hoge in say at ccc.pl line 11.
hoge =
res =

実数もダメ。
$ perl ccc.pl --hoge 2.2
Value "2.2" invalid for option hoge (number expected)
Use of uninitialized value $hoge in say at ccc.pl line 11.
hoge =
res =

こういうのを想定している。
$ perl ccc.pl --hoge 2
hoge = 2
res = 1

負の数もOK。
$ perl ccc.pl --hoge -2
hoge = -2
res = 1

じゃぁ、実数を渡したい場合は?っていうことで、
'hoge=i''hoge=f'に変更して、”ddd.pl”に保存すると、
$ perl ddd.pl --hoge 1.5
hoge = 1.5
res = 1

もちろん、負の数もOK。
$ perl ddd.pl --hoge -2.5
hoge = -2.5
res = 1

続く。

Leave a Comment