例えば以下の場合、--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'
]
};