2011-05-11 95 views
9

CPAN上的配置::名称空间中有很多模块,但它们都以不同的方式受到限制。我目前使用Config::Std,这是很好的大部分时间Perl中的配置文件处理

,但它使某些事情很难:

  • 两个以上级别的嵌套指令的每个键
  • 处理多个值
  • conf.d目录,即多个配置文件合并成一个大的配置散列

Config :: Std解析后生成一个幸福的hashref config,所以我的所有应用程序都被编码为使用hashref进行配置。我宁愿不必改变这一点。

我在寻找的是一个通用的,轻量级的配置模块,它产生一个hashref。

我的问题是:我应该考虑使用哪些配置模块来替换Config :: Std?

回答

6

你没有说明你的数据来自哪里。你是否正在阅读配置文件并且遇到配置文件本身的限制?

Config :: Std是一个很棒的模块。但是,它的目的是读取和写入Windows Config/INI文件,而Windows Config/INI文件非常平坦且格式简单。因此,我不希望Config :: Std做更多。

如果您现在正在使用Windows Config/INI文件,但将来可能需要阅读更复杂的数据结构,Config :: Any是一个好方法。它将处理Windows Config/INI文件并使用相同的编程接口,读取和写入XML,YAML和JSON文件结构。

如果你只是想在你的程序中保留一个复杂的数据结构,而不关心读写配置文件,那么我建议你看看XML :: Simple,原因很简单。 。...简单,可以处理各种数据结构。另外,XML :: Simple是一个非常常用的模块,所以如果您对模块有任何疑问,那么Internet上会有很多帮助,并且会得到积极的支持。

你可以使用Config :: Any,但是我觉得使用起来比较复杂,而且配置比较困难。事实上,你必须安装XML :: Simple(或类似的模块)才能使用它。 Config :: Any的优势在于它是适用于各种配置文件格式的单一接口。这样,如果您决定将Windows Config/INI切换到XML或YAML,则无需通过程序进行破解。因此,如果您现在正在使用Windows Config/INI文件,并且需要更复杂的数据结构:请查看Config :: Any。

如果您只想要一种简单的方式来跟踪复杂的数据结构,请查看XML :: Simple。

+0

Config ::任何阅读各种配置文件格式都很棒,但不提供将配置写回磁盘的钩子。 (如果我错过了,请纠正我) – spazm 2012-12-08 06:34:25