Updated: Just learned that the special option 'name' "<>"
can be used to designate a subroutine to
handle non-option arguments (see Argument callback section in the docs).
So the following is not entirely correct w.r.t. a "default option"...
Getopt::Long has lots of configuration options that have their own
defaults, but there's no option to define a default option and default
value/behavior for it. You need to do that for yourself, but
Getopt::Long can help. One of its default behaviors is to flag as errors
“Options that are unknown, ambiguous or supplied with an invalid
option value” (see the pass_through configuration option).
So if you do nothing special, GetOptions() will tell you when you use
an unknown option on the command line.
Using cjb's sample as a start, this shows what happens
when you include an unknown option on the command line:
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use Getopt::Long;
my $result = GetOptions (
h => \&help,
d => sub {print "\nRun DEV COMPARE\n";},
p => \&PROD,
);
say "result: $result";
bad_option() unless $result;
say "\ncontinuing normally";
say "Doing stuff.....";
say "exiting normally";
sub PROD {print "\nRun Production COMPARE\n";}
sub help {print "\nHelp text\n";}
sub bad_option {
print "\nInvalid option detected... Quitting!!!\n";
exit 1;
}
And run like so (only defined options):
./pm-888730 -h -d -p
Help text
Run DEV COMPARE
Run Production COMPARE
result: 1
continuing normally
Doing stuff.....
exiting normally
or thusly (one defined and one undefined option):
./pm-888730 -d -x
Run DEV COMPARE
Unknown option: x
result:
Invalid option detected... Quitting!!!
Comments:
-
GetOptions() returns 1 if all's well
-
default is a keyword starting in Perl 5.10, so I don't use it here
as a sub name (though it is possible to define a sub named
default, you just need to get the calling syntax right... exercise
for the reader).
-
Note that the behavior here is for GetOptions() to service all valid options
and also to flag the error(s). If you want to trap unknown options and quit
immediately, you need to move your dispatch table outside the call to
GetOptions() and trap the bad option(s) before dispatching.
|