I use Getopt::Long quite a bit, and I'm pretty fond of this idiom:
use Getopt::Long;
GetOptions(
'thing=s' => \(my $thing = ''),
'other=s' => \(my $other = ''),
'flag' => \(my $flag = 0),
) or die 'options'; # usually scripts are for my own use
The one thing that always bugged me about this approach is that I have to treat arrays differently. (I really like defining the scalars the way I've done it above. Makes it easy to add or delete them.) This fails:
use Getopt::Long;
GetOptions( 'array=s@' => \(my @array) ) or die 'options';
...because the backslash creates a list of references over its operands. Which, in the case of the newly created array, is the empty list. Is there a way to cleverly get the behavior I want? (a replacement for the "\(my @array)" part that would be equivalent in some sense to "my @array; \@array")