$grammar = q( file: section(s) section: header assign(s?) header: '[' /\w+/ ']' assign: pair comment(?) pair: /\w+/ '=' /\w+/ comment: /[\;\#]/ /\w+/ }; #### header: [ Section1 ] pair: key1 = value1 comment: # Comment assign: 1 ARRAY(0x1d5e758) pair: key2 = value2 comment: ; Comment assign: 1 ARRAY(0x2014078) pair: key3 = value3 assign: 1 ARRAY(0x1d5e818) section: 1 ARRAY(0x1d5e74c) header: [ Section2 ] pair: key4 = value4 assign: 1 ARRAY(0x20140cc) pair: key5 = value5 assign: 1 ARRAY(0x1d5e830) section: 1 ARRAY(0x2014090) file: ARRAY(0x2014084)