NAME Template::Plugin::DataHash - use INCLUDE_PATH to get confs with key fallback OVERVIEW Template::Plugin::DataHash provides a simple way to turn conf files, gathered from your INCLUDE_PATH into a single hash ref (no support for non hashes). I walk the INCLUDE_PATH, tack on the filename onto the end of each directory and this gives me the full_path of the file I will check. If the file exists, I run all the regexes in $self->{extension} (going in the order specified in $self->{extension_order}), to see which $type of conf I have, and then look for either a load_$type method or $self->{load_$type} (a CODE ref) and run the appropriate method. Each load_$type method takes a refence to $self and the full_path of the file, and returns a hash ref. Two structures in the object help manage the process. $self->{extension} $self->{extension} contains a hash ref of regex objects that map a type (Storable for example) to a regex that gets run on the full_path of the file. $self->{extension_order} $self->{extension_order} contains a array ref specifying the order to check the extensions. EXAMPLE Let's say you have two conf files: /tmp/default/conf.yaml key1: default1 key2: default2 /tmp/override/conf.yaml key2: override2 In your template you could put [% USE dho = DataHash({INCLUDE_PATH => ['/tmp/override', '/tmp/default']}) %] [% hash = dho.hash('conf.yaml') %] hash would then look like { key1 => 'default1', key2 => 'override2', } By default, the INCLUDE_PATH comes from $template_object->{CONFIG}{INCLUDE_PATH}. SUPPORTED EXTENSIONS This is the set of default extension regexes extension => { perl => qr/\.pl$/i, split => qr/\.split$/i, storable => qr/\.sto$/i, xml => qr/\.xml$/i, yaml => qr/\.yaml$/i, }, The default extension order is extension_order => [qw(yaml perl storable xml split)], ADDING YOUR OWN EXTENSION TYPES If I have left out an extension that you feel others may be interested in, let me know and I can easily add new types. If you have a custom extension, you need to get the custom name into $self->{extension}, like $self->{extension}{custom} = qr/\.custom$/; then you can either do an overriding object, or specify the method in your object, like $self->{load_custom} = sub { my $self = shift; my $full_path = shift; ... convert file to $ref in custom fashion ... return $ref }; AUTHOR Copyright 2003, Earl J. Cahill. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Address bug reports and comments to: cpan@spack.net. When sending bug reports, please provide the version of Template::Plugin::DataHash, the version of Perl, and the name and version of the operating system you are using.