如何使用Config :: General解析INI样式的配置文件?

时间:2012-02-22 02:35:48

标签: perl ini

我知道有Config::InifilesConfig::Simple等模块可以用来解析ini风格的配置。

但我想知道是否可以配置Config::General来理解.ini文件的格式。

如果ini文件只有键值对,那么Config::General工作正常,但它无法理解注释和节标题。

我尝试解析像:

这样的ini文件
; Config format
; [CONFIG_NAME]
; key1 = val1
; key2 = val2
; key3 = val3

[cat]
name = tom
likes = jerry

[mouse]
name = jerry
likes = cheese

但是Config::General的输出是:

$VAR1 = {
          '[mouse]' => '',
          'name' => [
                      'tom',
                      'jerry'
                    ],
          '[cat]' => '',
          'likes' => [
                       'jerry',
                       'cheese'
                     ],
          ';' => [
                   'Config format',
                   '[CONFIG_NAME]',
                   'key1 = val1',
                   'key2 = val2',
                   'key3 = val3'
                 ]
        };

有没有办法告诉Config::General正确解析这个?或者这是徒劳的,我应该切换到Config::Inifiles

1 个答案:

答案 0 :(得分:1)

答案是否:您无法使用Config :: General解析ini文件。从它的文档中,我发现Config :: General支持解析仅遵循一组规则的文件,并且我们无法将其配置为读取不同的格式,我想,这应该是它应该的样子。

因此,如果您想要读取Apache样式的配置或只具有键值对的rcfile,那么Config:General就是您的模块。但是如果你想阅读ini文件,请转到Config::Inifiles。同样,XML::Simple有助于解析XML文件。

我试图解决的主要问题是:我想使用我的perl脚本与数据库资源进行交互。我将通过配置文件获取数据库凭据,如dbname,用户名,密码等,但我不(希望)控制配置的格式,这意味着样式/语言应该是透明的,只要所需的密钥出现在配置中。

我找到了两个可以在这里工作的模块:Config::AnyConfig::Auto。这些本质上是特定于语言的Config :: *模块的包装器。因此,根据配置的结构,他们会猜测类型并进行相应的解析。

我个人更喜欢Config :: Auto,因为它的语法不那么冗长,但都解决了问题!