# my $input = "(cvtype='problem') and (problem_description match '*') and ((problem_synopsis match 'FCSIM') or (problem_synopsis match 'ATTE')) and (create_time>time('06/01/2014 0:00:00')) and (create_time<\/:"'\*_]+/ }; my $parser = Parse::RecDescent->new($grammar); my $result = $parser->startrule($input) or die "Could Not Parse!\n"; print Dumper $result; #### $VAR1 = { 'ARRAY(0xa102e8)' => 'cvtype=\'problem\'' }; I expected the results to look something like this: $VAR1 = { { 'cvtype=\'problem\'' } { and } { problem_description match \'*\' } };