use Getopt::Std; my %opts; die "Usage: $0 -a file | -s state | -l\n". "-a adds to database (or create), -s lists state -l lists whole DB\n" if (!getopts("a:s:l", \%opts) || @ARGV !=0 || keys %opts !=1; Add() if $opts{a}; ListState() if $opts{s}; ListAll() if $opts{l}; sub ListState { ...use $opts{s} here, the state name.... }