my $grammar = q~ #This is what I actually *use* $parser->logic($string); logic: expression eod { $return = $item[1]; } expression: termop: /and/i | /xor/i | /or/i term: '(' expression ')' { $return = $item[3]; } #[@item[1,3,4]]; } # Only include elements important to later processing | condition condition: element comparison element { $return = main::process(@item[1..3]); } element: '<' /-?\w+/ '>' { $return = "<$item[3]>"; } #Return this so that the condition value can be set | /\d+/ # num is automatically returned comparison: /(=[><]=)/ | /=?[><]=?/ | '=' | '!=' eod: /^\Z/ ~;