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

Perl Moose-从配置文件等加载值,perl,moose,Perl,Moose,我不熟悉使用Moose,但我想知道如何从配置文件加载值,然后将这些值作为“config”对象的属性公开,其中属性是配置文件中的配置名称 比如说,, 配置文件可能包含: server:mozilla.org protocol:HTTP 因此,我希望我的config对象有一个值为“mozilla.org”的“server”属性和一个值为“HTTP”的protocol属性 现在我的理解是,我必须用 has 'server' => ( is => 'ro', isa => 'Str

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

比如说,, 配置文件可能包含:

server:mozilla.org
protocol:HTTP
因此,我希望我的config对象有一个值为“mozilla.org”的“server”属性和一个值为“HTTP”的protocol属性

现在我的理解是,我必须用

has 'server'  => ( is => 'ro', isa => 'Str', default => 'mozilla.org' );
my Config.pm文件中的条目类型

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


蒂亚

这不是您所要求的,但是您可以通过在创建时使用填充配置信息来获得一个
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;
包我的::模块;
使用驼鹿;
具有'config'=>(isa=>'HashRef[Str]',is=>'rw',必需=>1);
关于BUILDARGS=>sub
{
我的$orig=班次;
我的$class=shift;
my$args=shift;#传入的其他参数(如果有)。
我的%config_哈希=();

open(my$read,“这是一个非常明显的想法,它已经实现了好几次

也看到


将命令行选项映射到属性,您很可能也需要这些属性。

我不得不拍拍自己的头,因为这现在看起来太明显了。我想我认为应该更“moosey”。这是一种模糊的恐惧,它要求我以完全正交的方式思考。谢谢!不用担心。:)
BUILDARGS
非常方便,我曾经摸索过(就像现在的孩子们说的那样),我发现自己经常使用它。很抱歉打扰你,但我有另一个问题,如果我能给你发封电子邮件可能是最好的。这可能吗?如果是另一个代码问题,请随时打开另一个关于Stackoverflow的问题。不过,如果你愿意,我的电子邮件地址是gmail.com的
杰克曼尼
。这是一个任务ion与实现您上面给出的示例相关。我正在尝试连接Config:Auto。我应该编辑上述问题还是创建一个新问题并引用此问题?这是正确答案。使用其他人已经编写和测试过的工具。