The Perl 5 module MooseX::App::Cmd marries App::Cmd with MooseX::Getopt. Use it like App::Cmd advises (especially see App::Cmd::Tutorial), swapping App::Cmd::Command for MooseX::App::Cmd::Command. Then you can write your moose commands as moose classes, with MooseX::Getopt defining the options for you instead of opt_spec returning a Getopt::Long::Descriptive spec.