my %opt_defs = ( ( map { $_ => "$_=s" } qw( a b ... ) ), ( map { $_ => "$_=i" } qw( i j ... ) ), ); GetOptions( \my %opts, values(%opt_defs), ) or die("...\n"); for my $opt (keys(%opt_defs)) { die("...\n") if !exists($opts{$opt}); }