This is ConfigReader 0.5. I'm calling it an alpha release, as I'd like to get feedback on the interface. ConfigReader is a set of classes for reading configuration files. The programmer can easily specify the directives to be read, as well as their default values and a parsing function or method to use. A lot of work went into error handling. The class implementation means that a simple subclass can be written to parse a different style of configuration file, and it will automatically get the specifying, error handling, and parser features of ConfigReader. You'll find documentation in ConfigReader.pod, as well as in the source files. The *.pm files should be installed in a "ConfigReader" subdirectory on your Perl include path. Copyright terms are under the GLPL (the GNU *Library* Public License which is less restrictive than the more well known GPL. I like the GLPL, as I think it does a good job of expressing my wish that the end-user can see and use my source code, without restricting the rest of the program. But please let me know if the GLPL would cause a problem for you. (Especially if you'd like to write some additional ConfigReader subclasses :-). There is one point of terminology in the documentation which I now realize is confusing. The config file parser class specifies the syntax of how directives and values are written in the config file: Verbose yes Verbose=yes {Verbose => 'yes'} The programmer can create a "parsing function or method", which converts a string representation into a Perl value (or object). This code can than be used transparently with any of the file parsing classes. sub yes_no { my ($val) = @_; if ($val =~ m/^y/i) { return 1; } else { return 0; } } directive $c, 'Verbose', undef, \&yes_no; directive $c, 'HomePage', undef, 'new URI::URL'; I think it might be clearer if "parsing" where used for parsing the configuration file into directive and value string pairs, and the "parsing function or method" was called something else. Suggestions are welcome. Andrew Wilcox awilcox@world.std.com