=pod =head1 NAME Config::Record - Configuration file access =head1 SYNOPSIS use Config::Record; # Create an empty record & then load from file my $config = Config::Record->new(); $config->load("/etc/myapp.cfg"); # Create & load, then save to filename my $config = Config::Record->new(file => "/etc/myapp.cfg"); $config->save("/etc/myapp.cfg"); # Load / save from filehandle my $fh = IO::File->new("/etc/myapp.cfg"); my $config = Config::Record->new(file => $fh); $config->save($fh); # Get a config value, throw error if not found my $value = $config->get("foo"); # Get a config value, return 'eek' if not found my $value = $config->get("foo", "eek"); # Set a value $config->set("foobar", "wizz"); # Get a deep config value (ie nested hash) my $value = $config->get("foo/bar", "eek"); # Get first element of an array param my $value = $config->get("people/[0]/forename"); # Get the raw hash reference forming the record my $record = $config->record(); # Get a new config object rooted at a sub-hash my $config = $config->view("foo"); =head1 DESCRIPTION This module provides an API for loading and saving of simple configuration file records. Entries in the configuration file are essentially key,value pairs, with the key and values separated by a single equals symbol. The C consists only of alphanumeric characters. There are three types of values, scalar values can contain anything except newlines. Trailing whitespace will be trimmed unless the value is surrounded in double quotes. eg foo = Wizz foo = "Wizz.... " Long lines can be split with a backslash character, without introducing newlines. Without double quotes, whitespace at beginning and end of lines will be trimmed eg foo = This is a long \ line of text foo = "This is a long " \ "line of text" Multi-line strings can be provided as 'HERE' documents, eg foo = < per line, terminated by a single left round bracket. eg foo = ( Wizz "Wizz... " ) Hash values consist of a single right curly bracket, followed by one key,value pair per line, terminated by a single left curly bracket. eg foo = { one = Wizz two = "Wizz.... " } Arrays and hashes can be nested to arbitrary depth. =head1 EXAMPLE name = Foo title = "Wizz bang wallop" eek = ( OOhh Aahhh Wizz ) people = ( { forename = John surnamne = Doe } { forename = Some surname = One } ) wizz = { foo = "Elk" ooh = "fds" } =head1 METHODS =over 4 =item my $config = Config::Record->new([file => $file]); Creates a new config object, loading parameters from the file specified by the C parameter. The C parameter can either be a string representing a fully qualified filename, or a IO::Handle object. If the C parameter is a string, this filename will be saved and future calls to C or C are permitted to omit the filename. If the C parameter is not supplied then an empty configuration record is created. =item $config->load([$file]); Loads and parses a configuration record. The C parameter can either be a string representing a fully qualified filename, or an IO::Handle object. The C<$file> parameter may be omitted, if a filename was specified in the constructor, or in previous calls to C or C. Prior to loading the record, the current contents of this configuration are cleared. =item $config->save([$file]); Saves the configuration record to a file. The C parameter can either be a string representing a fully qualified filename, or an IO::Handle object opened for writing. The C<$file> parameter may be omitted, if a filename was specified in the constructor, or in previous calls to C or C. =item my $value = $config->get($key[, $default]); Gets the value of a configuration parameter corresponding to the name C. If there is no value in the record, then the optional C is returned. =item $config->set($key, $value); Sets the value of a configuration parameter corresponding to the name C. =item $config->view($key) Return a new Config::Record object, rooted at the specified key. If the key doesn't resolve to a hash reference an error will be raised. =item my $record = $config->record(); Retrieves a hash reference for the entire configuration record. Currently this is the actual internal storage record, so changes will modify the configuration. In the next release this will be changed to be a deep clone of the internal storage record. =back =head1 BUGS Config::Record has the following limitations =over 4 =item * If you load and then save a configuration file all comments are removed & whitespace normalized. =item * Ordering of elements in hash ref are not preserved across load and save sequence =back These limitations may be fixed in a future release if there is demand from users... =head1 AUTHORS Daniel Berrange =head1 COPYRIGHT Copyright (C) 2000-2004 Daniel P. Berrange =head1 SEE ALSO C =cut