ip_address: 10.0.1.17
user: me
####
package Server;
use Carp;
use Moose;
use Modern::Perl;
use Config::Simple;
has 'cfg' => (is => 'ro', isa => 'HashRef', required => 1, writer => '_set_cfg' );
sub get {
validate_pos( @_, {isa => 'Server', optional => 0},{type => SCALAR, optional => 0} );
my $self = shift;
my $key = shift;
my $properties = $self->cfg;
return $properties->{$key};
}
around BUILDARGS => sub {
# Load cfg file and set cfg attribute here
}
####
my $server = Server->new('config_file_name');
$server->get('ip_address');
####
sub BUILD {
my $self = shift;
my $properties = $self->cfg;
foreach my $prop (keys %$properties) {
# check that the property doesn't already exist as a method
croak "Server config file property '$prop' clashes with existing method. Aborting."
if ($self->can($prop));
# create new method
$self->add_singleton_method( $prop => sub { $properties->{$prop}; } );
}
}