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}}