Template::Plugin::DataHash - use INCLUDE_PATH to get confs with key fallback


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} 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} contains a array ref specifying the order to check the extensions.


Let's say you have two conf files:


  key1: default1
  key2: default2


  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}.


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)],


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 };


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:

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.