# define option names and defaults our $UNIQUE_OPT = q/unique/; our $FORCE_OPT = q/force/; our $VERBOSE_OPT = q/verbose/; our $OUTPUT_EXT_OPT = q/ext/; # create option specs for Getopt my @option_config = qw( $UNIQUE_OPT $FORCE_OPT $VERBOSE_OPT $OUTPUT_EXT_OPT=s ); # create option hash for Getopt my(%option, %option_config); foreach my $option_config ( @option_config ) { # copy $option_config to $option_name, keep only name of option ( my $option_name = $option_config ) =~ s/\W.*$//; # save a reference to the %option value in %option_config hash $option_config{$option_config} = \$option{$option_name}; } # process options GetOptions %option_config or usage(); if ( $option{$UNIQUE_OPT} and $option{$FORCE_OPT} ) { die "-$UNIQUE_OPT and -$FORCE_OPT are mutually exclusive." . " See $SCRIPT_NAME -help for syntax."; }