I am using Conf.pm to get my config values. it is tidious to copy the same Conf.pm for each of my app and the only different is the config file path. so i would like to creat e a base Conf.pm and abstract out the config file part from sub load_config {}(probably by subclassing BaseConf) . this will allow me to provide different config path for different app easily. but i am not sure how to go about it.
the codes are based on the krang Conf.pm https://svn.krangcms.com/trunk/krang/lib/Krang/Conf.pm
anyway, here is my code
right now i can use it likepackage 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 $con +f_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;
but i would like to have it subclassed.. maybe like this :use base BaseConf qw/name1 name2/; ...
ideas?package MyConf; use base BaseConf; sub provide_my_config_path_here {} package main; use MyConf qw/name1 name2/;
In reply to need some OO help by Qiang
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |