Getopt::Compact::WithCmd is yet another Getopt::* module. It allows you to define git-like options. In addition, usage can be set at the same time.