"Getopt::Auto" is happy for you to use "long" ("--gnu-style"), "short" ("-oldstyle") or even "bare" command names, ("myprogram edit foo.txt", CVS-style) on the condition that you are consistent. Additionally, if you use bare or long style commands, then any short options passed before a command name will be sent into %main::options. For instance, given use Getopt::Auto ( "edit" => "open a file for editing", "export" => "write out the data as an ASCII file" ); "yourprog -vt edit -x foo.txt" will perform the following: $main::options{v} = 1 $main::options{t} = 1 edit("-x", "foo.txt");