开发者

Config file handling in Perl

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 mul开发者_运维百科tiple 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?


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)


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.


YAML will handle that and more.

And here's the website for the protocol.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜