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