So I've got a config file, with something like this in it:
ip_address: 10.0.1.17 user: me
Config file is used by a Server object:
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 }
So I create a Server object and access the cfg file values like so:
my $server = Server->new('config_file_name'); $server->get('ip_address');
This all works, but I want to get some practice doing some more advanced stuff with Moose. So I added use MooseX::SingletonMethod and the following BUILD method:
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 m +ethod. Aborting." if ($self->can($prop)); # create new method $self->add_singleton_method( $prop => sub { $properties->{$prop}; +} ); } }
Now I can get the ip address with $server->ip_address. Cool. But I'm wondering if there might be some unintended consequences of something like this might be (aside from security concerns of loading data from a config file).
$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |