我知道有Config::Inifiles
和Config::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
?
答案 0 :(得分:1)
答案是否:您无法使用Config :: General解析ini文件。从它的文档中,我发现Config :: General支持解析仅遵循一组规则的文件,并且我们无法将其配置为读取不同的格式,我想,这应该是它应该的样子。
因此,如果您想要读取Apache样式的配置或只具有键值对的rcfile,那么Config:General就是您的模块。但是如果你想阅读ini文件,请转到Config::Inifiles。同样,XML::Simple有助于解析XML文件。
我试图解决的主要问题是:我想使用我的perl脚本与数据库资源进行交互。我将通过配置文件获取数据库凭据,如dbname,用户名,密码等,但我不(希望)控制配置的格式,这意味着样式/语言应该是透明的,只要所需的密钥出现在配置中。
我找到了两个可以在这里工作的模块:Config::Any和Config::Auto。这些本质上是特定于语言的Config :: *模块的包装器。因此,根据配置的结构,他们会猜测类型并进行相应的解析。
我个人更喜欢Config :: Auto,因为它的语法不那么冗长,但都解决了问题!