Property::Lookup::File - File-based property lookup layer


Property-Lookup documentation Contained in the Property-Lookup distribution.

Index


Code Index:

NAME

Top

Property::Lookup::File - File-based property lookup layer

VERSION

Top

version 1.101400

SYNOPSIS

Top

    use Property::Lookup;

    my %opt;
    GetOptions(\%opt, '...');

    my $config = Property::Lookup->new;
    $config->add_layer(file => 'conf.yaml');
    $config->add_layer(getopt => \%opt);
    $config->default_layer({
        foo => 23,
    });

    my $foo = $config->foo;

    # ...

    use Property::Lookup::Local;
    local %Property::Lookup::Local::opt = (bar => 'baz');

DESCRIPTION

Top

This class implements a file-based property lookup layer. It subclasses Property::Lookup::Hash but implements a custom init method - see its documentation.

METHODS

Top

init

    my $layer = Property::Lookup::File->new(filename => 'conf.yaml');

If a filename has been set, it uses YAML to read that file. Before parsing it, certain substitutions are performed:

The word SELF is replaced by the path to the configuration file. This way file names relative to the configuration file can be specified.

A dollar sign, followed by an identifier - one or more word characters - is replaced by its equivalent value from the %ENV hash.

Normally you will use this layer via the add_layer() method from Property::Lookup.

INSTALLATION

Top

See perlmodinstall for information and options on installing Perl modules.

BUGS AND LIMITATIONS

Top

No bugs have been reported.

Please report any bugs or feature requests through the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=Property-Lookup.

AVAILABILITY

Top

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see http://search.cpan.org/dist/Property-Lookup/.

The development version lives at http://github.com/hanekomu/Property-Lookup/. Instead of sending patches, please fork this project using the standard git and github infrastructure.

AUTHOR

Top

  Marcel Gruenauer <marcel@cpan.org>

COPYRIGHT AND LICENSE

Top


Property-Lookup documentation Contained in the Property-Lookup distribution.

use 5.008;
use strict;
use warnings;

package Property::Lookup::File;
BEGIN {
  $Property::Lookup::File::VERSION = '1.101400';
}
# ABSTRACT: File-based property lookup layer
use File::Basename;
use parent 'Property::Lookup::Hash';
__PACKAGE__->mk_scalar_accessors(qw(filename));

sub init {
    my $self = shift;
    $self->SUPER::init(@_);
    if (my $conf_file = $self->filename) {

        # replace dollar-variables with their environment equivalent; also
        # some special definitions
        open my $fh, '<', $conf_file or die "can't open $conf_file: $!\n";
        my $yaml = do { local $/; <$fh> };
        close $fh or die "can't close $conf_file: $!\n";
        $ENV{SELF} = dirname($self->filename);
        $yaml =~ s/\$(\w+)/$ENV{$1} || "\$$1"/ge;
        require YAML;
        $self->hash(YAML::Load($yaml));
    }
}
1;


__END__