Edward J. Allen III
and 1 contributors


Config::Options - module to provide a configuration hash with option to read from file.


        use Config::Options;

        my $options = Config::Options->new({ verbose => 1, optionb => 2, mood => "sardonic" });

        # Access option as a hash...
        print "My mode is ", $options->{mood}, "\n";

        # Merge a hash of options...
        $options->options({ optionc => 5, style => "poor"});

        # Merge options from file

        $options->options("optionfile", $ENV{HOME} . "/.myoptions.conf");


Edward Allen, ealleniii _at_ cpan _dot_ org


The motivation for this module was to provide an option hash with a little bit of brains. It's pretty simple and used mainly by other modules I have written.



Create new options hash. Pass it a hash ref to start with. Please note that this reference is copied, not blessed.

        my $options = Config::Options->new({hash_of_startup_options}); 

Creates a clone of options object.

        my $newoptions = $options->clone();

This is a utility function for accessing options. If passed a hashref, merges it. If passed a scalar, returns the value. If passed two scalars, sets the option.

        my $optionsb = $options->options;     # Duplicates option file.  Not very usefull.
        $options->options($hashref);          # Same as $options->merge($hashref);
        my $value = $options->options("key")  # Return option value.
        $options->options("key", "value")         # Set an option.

Takes a hashref as argument and merges with current options.


Same as merge, except when a value is a hash or array reference. For example:

        my $options = Config::Options->new({ moods => [ qw(happy sad angry) ] });
        $options->deepmerge({ moods => [ qw(sardonic twisted) ] });

        print join(" ", @{$options->{moods}}), "\n";

The above outputs:

        happy sad angry sardonic twisted

This is used to store options to a file. The file is actually a perl program that returns a hash. By default uses option 'optionfile' as filename, or value passed as argument.

If 'optionfile' is an array, then uses LAST option in array as default.


This is used to retreive options from a file. The optionfile is actually a perl program that returns a hash. By default uses option 'optionfile' as filename if none is passed.

If 'optionfile' is an array, reads all option files in order.

Non-existant files are ignored.

Please note that values for this are cached.

deserialize($data, $source)

Takes a scalar as argument and evals it, then merges option. If second option is given uses this in error message if the eval fails.

        my $options = $options->deserialize($scalar, $source);

Output optons hash as a scalar using Data::Dumper.

        my $scalar = $options->serialize();

Removes $key from options.


Deepmerge does a poor job at recogniaing recursive loops.

For example, $options->deepmerge($options) will really screw things up. As protection, will only loop 20 deep.

fromfile_perl provides tainted data.

Since it comes from an external file, the data is considered tainted.




This program is free software; you can redistribute it and/or modify it under the terms of the Artistic License, distributed with Perl.


Copyright (c) 2007 Edward Allen III. Some rights reserved.