package Autocache::Config; use strict; use warnings; use base 'Autocache::Config::Node'; use Carp; use IO::File; use Data::Dumper; sub new { my ($class,$filename) = @_; my $self = $class->SUPER::new( '' ); if( $filename ) { confess "configuration file supplied cannot be found/read" unless _file_good( $filename ); $self->_load_config_file( $filename ); } else { $filename = _locate_config_file(); $self->_load_config_file( $filename ) if defined $filename; } return $self; } sub _load_config_file { my ($self,$filename) = @_; my $fh = IO::File->new( $filename, 'r' ) or confess "cannot open file for reading '$filename'"; while( my $line = <$fh> ) { next if $line =~ /^\s*$/; next if $line =~ /^#/; next unless $line =~ /^autocache./; $line =~ s/^autocache.//; chomp $line; my ( $key, $value ) = split /\s+=\s+/, $line, 2; $self->get_node( $key )->value( $value ); } $fh->close; return 1; } sub _locate_config_file { my $filename = sprintf '%s/etc/autocache.conf', $ENV{HOME}; if( _file_good( $filename ) ) { return $filename; } $filename = '/etc/autocache.conf'; if( _file_good( $filename ) ) { return $filename; } return undef; } sub _file_good { return ( -e $_[0] && -r _ ); } 1;