sub printUsage { my ($mandatory, $optional) = @_; print "Usage: $0\n"; print "-$_ ", uc $_, " " for @$mandatory; print $/; print "[-$_ ", uc $_, "]" for @$optional; print $/; } #### my @mandatory = qw(user to_db to_sid to_site); my @optional = qw(password vendor type model); my @default = qw(from_db from_sid); our $from_db = "some_db"; our $from_sid = "some_sid"; my $args = {}; my $rc; { no strict 'refs'; $rc = GetOptions($args, (map { "${_}=s" } @mandatory), (map { "${_}:s" } @optional), (map { ("${_}=s", \${"$_"}) } @default), ); } printUsage(\@mandatory, \@optional, \@default) unless $rc; printUsage(\@mandatory, \@optional, \@default) if grep !exists $args->{$_}, @mandatory;