Perl Moose - 从配置文件中加载值等

时间:2012-03-19 21:09:12

标签: perl moose

我是使用Moose的新手,但我想知道如何从配置文件中加载值,然后将这些值作为我的' config'的属性公开。对象,其中属性是配置文件中的配置名称。

例如, 配置文件可能包含:

server:mozilla.org
protocol:HTTP

所以我希望我的配置对象拥有一台服务器'属性值为' mozilla.org'和一个值为' HTTP'的协议属性。

现在我的理解是我必须用

明确命名属性
has 'server'  => ( is => 'ro', isa => 'Str', default => 'mozilla.org' );

我的Config.pm文件中的条目类型。

如何动态创建这些文件以便配置文件可以更改而不必每次都重写Config.pm?

TIA!

2 个答案:

答案 0 :(得分:7)

这是一个显而易见的想法,它已经实施了好几次。

另见

将命令行选项映射到属性,这是您最有可能想要的。

答案 1 :(得分:2)

这不是你要求的,但你可以通过使用BUILDARGS在创建时填充配置信息来获得一个哈希引用的config属性。假设配置文件的行由:分隔的键值对组成,这样的东西应该可以工作:

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;

只需很少的工作量,就可以轻松地使用其他属性来指定配置文件的名称和路径以及分隔符。这些可以在BUILDARGS内部访问,例如$args->{config_file}$args->{config_delimiter}