$ perl -Mstrict -Mwarnings -le '
use Getopt::Long;
sub sub1 {
my ($name, $value) = @_;
my $want = 3;
my @got = split /\s+/ => $value;
die "--$name requires $want values. Got: @got\n" unless @got == $want;
print "$name $_" for @got;
}
GetOptions( "test=s" => \&sub1 );
' -- --test 'a b c'
test a
test b
test c
####
$ perl -Mstrict -Mwarnings -le '
...
' -- --test 'a b'
--test requires 3 values. Got: a b
####
$ perl -Mstrict -Mwarnings -le '
...
' -- --test 'a b c d'
--test requires 3 values. Got: a b c d
####
$ perl -Mstrict -Mwarnings -E '
use Getopt::Long;
sub sub1 { state $i = 0; ++$i; say "$i: >>>$_<<<" for @_ }
GetOptions( "test=s{3}" => \&sub1 );
' -- --test a b c
1: >>>test<<<
1: >>>a<<<
2: >>>test<<<
2: >>>b<<<
3: >>>test<<<
3: >>>c<<<