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}; } ); } }