Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Config file handling in Perl

Tags:

config

perl

cpan

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?

like image 447
tex Avatar asked May 11 '11 06:05

tex


2 Answers

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)

like image 95
daxim Avatar answered Oct 22 '22 05:10

daxim


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.

like image 31
David W. Avatar answered Oct 22 '22 05:10

David W.