If you are familiar with Moose
then I would recommend taking a look at MooseX::GetOpt
. It is great for rapidly creating command-line applications and it has options for dealing with config files.
From the MooseX::GetOpt documentation: If your class also uses a configfile-loading role based on MooseX::ConfigFromFile, such as MooseX::SimpleConfig, MooseX::Getopt's new_with_options will load the configfile specified by the --configfile option (or the default you've given for the configfile attribute) for you.