in reply to Problem with P::RD grammar

If you set $::RD_TRACE, it would tell you where it stopped working for the first time, by not matching the terminals or rule or subrules.

The following code works as per what you want.

$grammar = q( file: section(s) section: header assign(s?) header: '[' /\w+/ ']' assign: pair comment(?) pair: /\w+/ '=' /\w+/ comment: /[\;\#]/ /\w+/ };
It gives you the output like:
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)
The removal of the '$' sign at the end of the 'assign' terms does the trick. I also seperated the comments from the key value pair.

artist