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