0

如何使用Config::General设置使用Config::Any插入环境变量。这是我从我的OX应用程序中提取的配置片段,它返回我的.conf罚款中指定的数据,除了我无法让它识别环境变量。

has config => (
  isa          => 'HashRef',
  is           => 'ro',
  lifecycle    => 'Singleton',
  dependencies => ['config_file'],
  block        => sub {
    my $s = shift;

    my $cfg
        = load_class('Config::Any')->load_files({
            flatten_to_hash => 1,
            use_ext         => 1,
            files           => [ $s->param('config_file') ],
            General         => {
                -InterPolateEnv => 1,
            },
        });

    return $cfg->{ $s->param('config_file') };
  },
);

这是我的配置的几次尝试

<db>
   dsn $PERL_FEEDER_DSN
</db>

<db>
   dsn $ENV{PERL_FEEDER_DSN}
</db>

这两个都以包含文字的 dsn 结束$...

我以前做过,但我不知道我是怎么做到的,或者我可能做错了什么。

4

1 回答 1

1

您需要-InterPolateEnv => 1结合指定-InterPolateVars => 1以便Config::General::Interpolated加载。据我了解,它-InterPolateEnv => 1本身不会触发该模块的加载。这是该模块理解的选项。

#!/usr/bin/env perl

use strict;
use warnings;
use Config::General;

my $conf = new Config::General(
    -ConfigFile      => 'test.conf',
    -InterPolateEnv => 1,
    -InterPolateVars => 1,
);

use YAML;
print Dump { $conf->getall };

配置文件:

<数据库>
   dsn $PERL_FEEDER_DSN
</db>

输出:

---
D b:
  dsn:测试
于 2013-03-20T15:07:10.473 回答