Scripts
Standard prologue for option parsing:
use Getopt::Long;
my $platform = 'Unix';
$platform = 'Windows' if ($^O =~ /^(?:MSWin32|os2|dos)$/);
my %infoForOption = (
cookiefile => {
optfmt => '=s',
},
cookiefiletype => {
optfmt => '=s',
default => 'Mozilla',
supportedValues => [
'Mozilla',
'Microsoft',
],
},
authfile => {
optfmt => '=s',
},
savecookies => {
},
urlfile => {
optfmt => '=s',
fMandatory => 1,
},
'help|h' => {
optName => 'help',
},
man => {
},
debug => {
},
verbose => {
optfmt => '+',
},
};
# Build up list of options (to pass to GetOptions) and list of mandatory
# options so it can be checked afterwards
my @supportedOptions;
my @mandatoryOptions;
my %options = ();
foreach my $opt ( keys %infoForOption )
{
my $optInfo = $infoForOption{$opt};
my $optDesc = $opt;
$optDesc .= $optInfo->{optfmt}
if exists $optInfo->{optfmt} && $optInfo->{optfmt};
push @supportedOptions, $optDesc;
if ( exists $optInfo->{fMandatory} && $optInfo->{fMandatory} )
{
my $optName = $opt;
if ( exists $optInfo->{optName} && $optInfo->{optName} )
{
$optName = $optInfo->{optName};
}
push @mandatoryOptions, $optName;
}
if ( exists $optInfo->{default} && defined $optInfo->{default} )
{
$options{$opt} = $optInfo->{default};
}
} # Loop over all options
GetOptions(\%options, @supportedOptions);
if ( exists $options{help} )
{
pod2usage(-verbose => 1, -exitval => 0);
}
if ( exists $options{man} )
{
pod2usage(-verbose => 2, -exitval => 0);
my @missingOpts = ();
foreach my $opt ( @mandatoryOptions )
{
unless ( exists $options{$opt}
&& defined $options{$opt} && $options{$opt} ne '' )
{
push @missingOpts, $opt;
}
}
@missingOpts = sort @missingOpts;
if ( scalar @missingOpts )
{
print "Missing mandatory options: -", join ' -', @missingOpts;
print "\n";
exit 1;
}
# ... loop over options with supportedValues, and validate them
# grep $options{argName}, @{$infoForOption{argName}{supportedValues}}