package BaseConf;
use strict;
use warnings;
use Carp qw(croak);
use Config::Tiny;
my $Conf;
sub _load_config {
my $conf_file = "/path/to/my.conf";
croak "unable to find $conf_file" unless -e $conf_file and -r $conf_file;
$Conf = Config::Tiny->read( $conf_file );
croak "read config file '$conf_file' failed: $Config::Tiny::errstr" unless $Conf;
}
BEGIN { _load_config() }
sub get {
croak "invalid method called $_[1]" if not exists $Conf->{_}->{ $_[1] };
return $Conf->{_}->{ $_[1] };
}
sub import {
my $pkg = shift;
my $callpkg = caller(0);
foreach my $name (@_) {
no strict 'refs'; # needed for glob refs
*{"$callpkg\::$name"} = sub () { $pkg->get( $name ) };
}
}
1;
####
use base BaseConf qw/name1 name2/;
...
####
package MyConf;
use base BaseConf;
sub provide_my_config_path_here {}
package main;
use MyConf qw/name1 name2/;