Config file handling in Perl

不想你离开。 提交于 2019-12-12 10:35:09

问题


There are plenty of Modules in the Config:: Namespace on CPAN, but they are all limited in ond way or another.

I'm currently using Config::Std, which is fine most of the time, however it makes certain things difficult:

  • more than two levels of nested directives
  • handling of multiple values per key
  • conf.d directories, i.e. multiple config files which are merged into one big config hash

Config::Std generates a blessed hashref after parsing the config, so all my applications are coded to use a hashref for configuration. I'd prefer not having to change this.

What I am looking for is a universal, lightweight Config Module that produces a hashref.

My Question is: Which Config Modules should I consider for replacing Config::Std?


回答1:


You didn't state where your data is coming from. Are you reading in a configuration file and running into the limit of the configuration file itself?

Config::Std is a great module. However, it was meant to read and write Windows Config/INI files, and Windows Config/INI files are very flat and simple formats. Thus, I wouldn't expect Config::Std to do much more.

If you're using Windows Config/INI files right now, but may need to read more complex data structures in the future, Config::Any is a good way to go. It'll handle Windows Config/INI files and using the same programming interface, read and write XML, YAML, and JSON file structures too.

If you're merely trying to keep a complex data structure in your program and don't care about reading and writing configuration files, I would recommend looking at XML::Simple for the very simple reason that it is ...well... simple and can handle all sorts of data structures. Plus, XML::Simple is a very commonly used module, so there's lots of help on the Internet if you have any questions about the module, and it is actively supported.

You could use Config::Any, but I find it more complex to use, and harder to configure. In fact, you have to install XML::Simple (or a similar module) in order to use it. The advantage of Config::Any is that it is a single interface for all sorts of configuration file formats. That way, you don't have to hack through your program if you decide to switch form Windows Config/INI to XML or YAML.

So, if you're working with Windows Config/INI files now, and need a more complex data structure: Look at Config::Any.

If you're merely wanting a simple way to track complex data structures, look at XML::Simple.




回答2:


Config::Any (for loading several files and flattening to a hash) and its Config::General backend (for arbitrarily nested configuration items and multiple values per key à la Apache httpd)




回答3:


YAML will handle that and more.

And here's the website for the protocol.



来源:https://stackoverflow.com/questions/5960223/config-file-handling-in-perl

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!