映射硬编码的配置文件

时间:2013-06-23 01:23:33

标签: perl config

我搜索过模块以读取配置文件,例如ConfigConfig::TinyConfig::Simple。我对使用它们并不是太模糊,是否有用于存储/读取dbi配置和用户名/密码的模块?我自己试图这样做,我希望将配置文件放在哈希数据结构中,以便于导入到我的模块中。他们是一种更简单的方法来做我正在尝试的事情或者可以建议的首选模块吗?

示例配置文件:

[database]
db=newsdb
host=example.com
user=test
pass=test

[login]
user=john
pass=doe

编码:

use strict;
use warnings;
use File::Slurp;
use Data::Dumper;

# get database info
my %conf = 
    map  { /^\[database/ ? () : $_ }
    grep { /^\w+.*$/ }
    map  { s/\s?\n?\r?//g; (split /=/)[0,1] } read_file('database.conf');

print Dumper \%conf;

$VAR1 = {
          'pass' => 'test',
          'db'   => 'newsdb',
          'user' => 'test',
          'host' => 'example.com'
        };

1 个答案:

答案 0 :(得分:4)

Config模块不用于读取配置文件,而是提供有关perl配置的详细信息。

此处的简单路线是use Config::Simple,然后是

Config::Simple->import_from("database.conf" => \my %config);

print Dumper \%config;

输出:

$VAR1 = {
  'database.host' => 'example.com',
  'login.pass' => 'doe',
  'login.user' => 'john',
  'database.user' => 'test',
  'database.db' => 'newsdb',
  'database.pass' => 'test'
};

或者,要访问一个块,我们可以

my $config = Config::Simple->new("database.conf")->get_block("database");
print Dumper $config;

会给出

$VAR1 = {
  'pass' => 'test',
  'db' => 'newsdb',
  'user' => 'test',
  'host' => 'example.com'
};

作为输出。有关详细信息,请阅读documentation


Config::Tiny

更简单
my $config = Config::Tiny->read("database.conf");

print Dumper $config;

会给出

$VAR1 = bless( {
  'database' => {
    'pass' => 'test',
    'db' => 'newsdb',
    'user' => 'test',
    'host' => 'example.com'
  },
  'login' => {
    'pass' => 'doe',
    'user' => 'john'
  }
}, 'Config::Tiny' );

因此可以使用

选择database部分
print Dumper $config->{database}

将输出

$VAR1 = {
  'pass' => 'test',
  'db' => 'newsdb',
  'user' => 'test',
  'host' => 'example.com'
};

您可以在documentation中了解详情。