my($help,$backup,$upd_sybase,$silent); GetOptions('help|h!' => \$help, 'b!' => \$backup, 'u!' => \$upd_sybase, 's!' => \$silent); # assuming it's always key1 value1 key2 value2 in argument list my %other_args = @ARGV; # if your arguments are positional, do this: # my($server,$password) = @ARGV; # called like this: ./foo --silent server bar password blah # yields: # $silent == 1 # $other_args{server} eq "bar"; # $other_args{password} eq "blah";