|P is for Practical|
Extremely flexible handling of both configuration files, and commandline parameters.
Four parameter types - boolean, scalar, array and hash.
As each parameter is defined it can have various properties set, including DEFAULT setting, ACTION to take on use, VALIDATE based on regex or sub result, various types of variable EXPANDing, variable name ALIASes.
The properties DEFAULT, ACTION, VALIDATE, and EXPAND can be set globally as well as local to a parameter.
Can handle multiple sources of configuration file, including filehandles.
VALIDATEs which use a sub don't appear to trigger the return of a false value from the arg() method, although a warning to the user is printed.
ACTIONs cannot alter the value they're attached to, as this sets up a circular reference.
An extremely useful module which, although it takes a bit of time to get to know, is well worth the extra effort.