I admit, this is not the most flexible configuration framework out there as it enforces some convention. And I don't/can't use it on every project. But it's certainly one of the easiest. You can slap a few lines of options declaration in your code and voila, your script suddenly can accept command line arguments, has --help message et al, read from config files (in several preset locations).
There are still a few annoyances (I submitted them in the RT), but in general, this is a very handy module to use for lazy coders who just want to accept configuration/options from outside the code.
<shameless plug>I'm trying to do somewhat the same with Config::Tree, but as of now the module is not really done yet.</shameless plug>
I'm reducing the ratings from 5 to 2. I've now avoided using this module due to two lingering issue since 2010: 1) App::Options does not accept '--opt val', only '--opt=val' which is incompatible with how most command-line programs work, causing confusion for some of my users. 2) 'perl -c' doesn't work under this module, it will still trigger command-line processing.
I'm now using Perinci::CmdLine as replacement, but I cannot recommend it in general, as the two modules are not equivalent.
I've researched all of the option processing modules I could find which advertised features to support my needs. This module most closely matches my needs. It handles CLI, ENV, config files, and programmed defaults and does it with ease, grace, and common sense.
Options do not need to be defined with this module which may be contrary to some developer's good design in a `use strict' fashion, but for those that want flexibility in their options without having to be detailed in their declaration, this is a very useful feature.
The code is very well designed and written. The documentation is fantastic. It's extremely easy to get started with this module. It's designed so well that it starts working with just `use App::Options;` and it's so well documented that it doesn't take much to figure out how to improve its handling from there.
Use this module for all your option processing needs. It even aids in a developer-tester-production workflow environment.