В моем предыдущем вопросе Moose - загрузка значений из файлов conf ... Джек Мани был достаточно любезен, чтобы привести пример того, как это сделать с помощью Moose.
Чтобы сделать объект конфигурации еще более общим, я решил использовать Config :: Auto .
Проблема в том, что я все еще очень зеленый относительно того, как Mooseработает.Например, пример Джека:
package My::Module;
use Moose;
has 'config'=>(isa=>'HashRef[Str]',is=>'rw',required=>1);
around BUILDARGS=>sub
{
my $orig=shift;
my $class=shift;
my $args=shift; #other arguments passed in (if any).
my %config_hash=();
open(my $read,"<","config_file") or confess $!;
while(<$read>)
{
chomp;
my @array=split /:/;
$config_hash{$array[0]}=$array[1];
}
close($read);
$args->{config}=\%config_hash;
return $class->$orig($args);
};
no Moose;
1;
Я изменил это так:
#!/usr/local/bin/perl
package DART::Setup;
use namespace::autoclean;
use Moose;
use Config::Auto;
our $VERSION = '0.0.1';
has 'EMPTY' => ( isa => 'Str', is => 'ro', default => q{} );
has 'PPLTESTEXECUTIONID' => ( isa => 'Int', is => 'ro', default => 0 );
has 'SARQTESTEXECUTIONID' => ( isa => 'Int', is => 'ro', default => 0 );
has 'ISPROXY' => ( isa => 'Int', is => 'ro', default => 0 );
has 'LOCALHOST' => ( isa => 'Str', is => 'ro', default => '127.0.0.1' );
has 'config'=>(isa=>'HashRef[Str]',is=>'rw',required=>1);
has 'SSO' => ( isa => 'Str', is => 'rw', default => q{} );
has 'cookieFile' => ( isa => 'Str', is => 'rw', default => q{} );
around BUILDARGS=>sub
{
my $orig=shift;
my $class=shift;
my $args=shift;
my $cfg = Config::Auto::parse($args);
my %config_hash = %{$cfg};
$args->{config}=\%config_hash;
return $class->$orig($args);
};
return 1;
Но, если честно, я не уверен, что я здесь делаю.Во-первых, сколько аргументов мне нужно предоставить при создании нового объекта установки?Должен ли я просто передать ему путь к моему файлу конфигурации, что-то вроде:
my $newConfig = DART::Setup->new('/home/y/conf/MyApp/MyApp.cfg');
Или мне нужно предоставить аргументы для $ orig и $ class?
Наконец, как мне теперьполучить доступ к моим недавно загруженным конфигурациям?Могу ли я сделать что-то вроде:
my %configHash = %{$newConfig->config()};
foreach my $key (keys %configHash) {
print "the key is, $key, and the value is: $configHash{$key}\n";
}
Правильно ли я понимаю?