例えば以下の場合、--tagで受け取れるオプションは最後につけたものだけが$opts{tag}に格納される。
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Getopt::Long; my %opts = (); GetOptions( \%opts, 'tag=s'); print Dumper \%opts; exit;
下のように引数を与えた場合は、--tagで指定した最後の引数であるtag2が$opts{tag}の値になる。また、--tagの数が1の場合はそのときの値が格納される。
$ perl hoge.pl --tag tag0 --tag tag1 --tag tag2 $VAR1 = { 'tag' => 'tag2' }; $ perl hoge.pl --tag tag0 $VAR1 = { 'tag' => 'tag0' };
以下のようにGetOptionsのtagオプションに関する引数に@をつけると、$opt{tag}は配列リファレンスになり、--tagで指定された引数を格納するようになる。
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Getopt::Long; my %opts = (); GetOptions( \%opts, 'tag=s@'); print Dumper \%opts; exit;
したがって、以下のようになる。--tagの指定回数に依らず、$opt{tag}のデータ構造は配列リファレンスで全ての引数の値を格納する。
$ perl hoge.pl --tag tag0 --tag tag1 --tag tag2 $VAR1 = { 'tag' => [ 'tag0', 'tag1', 'tag2' ] }; $ perl hoge.pl --tag tag0 $VAR1 = { 'tag' => [ 'tag0' ] };