Here's another variation on the same theme. In this case a new array is created from @ARGV with multiple words collapsed into one array element. The advantage is that this rebuilt version of @ARGV can be fed into Getopt::Long's GetOptionsFromArray method:
use strict;
use warnings;
use Getopt::Long qw(GetOptionsFromArray);
my @arglist = ();
for my $arg (@ARGV) {
if ($arg =~ /^-/) {
push(@arglist, $arg);
} else {
if ($arglist[$#arglist] =~ /^-/) {
push(@arglist, $arg);
} else {
$arglist[$#arglist] .= ' '.$arg;
}
}
}
my ($opta, $optb, $optc);
GetOptionsFromArray(\@arglist, 'a=s' => \$opta,
'b=s' => \$optb,
'c=s' => \$optc);
for ($opta, $optb, $optc) {
print $_,"\n";
}