2

我已经搜索了模块来读取配置文件,例如Config, Config::Tiny, Config::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'
        };
4

1 回答 1

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'
};

作为输出。阅读文档以获取更多信息。


它变得更加简单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'
};

您可以在文档中了解更多信息。

于 2013-06-23T08:28:14.810 回答