SYNOPSIS use Config::IOD::Reader; my $reader = Config::IOD::Reader->new( # list of known attributes, with their default values # default_section => 'GLOBAL', # enable_encoding => 1, # enable_quoting => 1, # enable_backet => 1, # enable_brace => 1, # allow_encodings => undef, # or ['base64','json',...] # disallow_encodings => undef, # or ['base64','json',...] # allow_directives => undef, # or ['include','merge',...] # disallow_directives => undef, # or ['include','merge',...] # allow_bang_only => 1, # enable_expr => 0, ); my $config_hash = $reader->read_file('config.iod'); DESCRIPTION This module reads IOD configuration files. It is a minimalist alternative to the more fully-featured Config::IOD. It cannot write IOD files and is optimized for low startup overhead. EXPRESSION Config::IOD::Reader 0.05 adds experimental support for expression. This allows you to do something like this: [section1] foo=1 bar="monkey" [section2] baz =!e 1+1 qux =!e "grease" . val("section1.bar") quux=!e val("qux") . " " . val('baz') And the result will be: { section1 => {foo=>1, bar=>"monkey"}, section2 => {baz=>2, qux=>"greasemonkey", quux=>"greasemonkey 2"}, } For safety, you'll need to set enable_expr to 1 first. The syntax of the expression (the expr encoding) is not officially specified yet in the IOD specification. It will probably be Expr (see Language::Expr::Manual::Syntax). At the moment, this module implements a very limited subset that is compatible (lowest common denominator) with Perl syntax and uses eval() to evaluate the expression. However, only the limited subset is allowed (checked by Perl 5.10 regular expression). The supported terms: number string (double-quoted and single-quoted) undef literal function call (only the 'val' function is supported) grouping (parenthesis) The supported operators are: + - . * / % x ** unary -, unary +, !, ~ The val() function refers to the configuration key. If the argument contains ".", it will be assumed as SECTIONNAME.KEYNAME, otherwise it will access the current section's key. Since parsing is done in a single pass, you can only refer to the already mentioned key. ATTRIBUTES default_section => str (default: GLOBAL) If a key line is specified before any section line, this is the section that the key will be put in. enable_encoding => bool (default: 1) If set to false, then encoding notation will be ignored and key value will be parsed as verbatim. Example: name = !json null With enable_encoding turned off, value will not be undef but will be string with the value of (as Perl literal) "!json null". enable_quoting => bool (default: 1) If set to false, then quotes on key value will be ignored and key value will be parsed as verbatim. Example: name = "line 1\nline2" With enable_quoting turned off, value will not be a two-line string, but will be a one line string with the value of (as Perl literal) "line 1\\nline2". enable_bracket => bool (default: 1) If set to false, then JSON literal array will be parsed as verbatim. Example: name = [1,2,3] With enable_bracket turned off, value will not be a three-element array, but will be a string with the value of (as Perl literal) "[1,2,3]". enable_brace => bool (default: 1) If set to false, then JSON literal object (hash) will be parsed as verbatim. Example: name = {"a":1,"b":2} With enable_brace turned off, value will not be a hash with two pairs, but will be a string with the value of (as Perl literal) '{"a":1,"b":2}'. allow_encodings => array If defined, set list of allowed encodings. Note that if disallow_encodings is also set, an encoding must also not be in that list. Also note that, for safety reason, if you want to enable expr encoding, you'll also need to set enable_expr to 1. disallow_encodings => array If defined, set list of disallowed encodings. Note that if allow_encodings is also set, an encoding must also be in that list. Also note that, for safety reason, if you want to enable expr encoding, you'll also need to set enable_expr to 1. enable_expr => bool (default: 0) Whether to enable expr encoding. By default this is turned on, for safety. Please see "EXPRESSION" for more details. allow_directives => array If defined, only directives listed here are allowed. Note that if disallow_directives is also set, a directive must also not be in that list. disallow_directives => array If defined, directives listed here are not allowed. Note that if allow_directives is also set, a directive must also be in that list. allow_bang_only => bool (default: 1) Since the mistake of specifying a directive like this: !foo instead of the correct: ;!foo is very common, the spec allows it. This reader, however, can be configured to be more strict. METHODS new(%attrs) => obj $reader->read_file($filename) => hash Read IOD configuration from a file. Die on errors. $reader->read_string($str) => hash Read IOD configuration from a string. Die on errors. SEE ALSO IOD, Config::IOD, IOD::Examples