My escalation pattern, based on complexity of the data to be represented, goes like this:
- perl config file
- Config::ApacheFormat or Config::IniFiles
- XML with XML::Simple
Contrary to what some are saying here, I find XML files to be the easiest solution as soon as you go beyond the basic operation of the others. I always write them by hand and haven't found that to be a problem. It's really a small step from Apache-style configs, but it allows for representation of more complex configuration data.