in reply to Config files in CPAN modules?

File::UserConfig might be one way to at least handle the initial case.

It installs to the module's "auto" share directory a default copy of the configuration file/directory.

When the program runs the first time for a new user, it copies it to the appropriate place.

For the upgrade case, perhaps what Ruby on Rails does for SQL schema. You have the config in a format you can manipulate, then write a series of classes that upgrade or downgrade from one version to the next.

Upgrading over a number of releases just means running each upgrade sequentially (with a backup first).