in reply to Parse::RecDescent grammar and Parenthesis

Try losing the return when returning values. This fragment of the parser (for expression) works for me:
expression : INTEGER OP expression { &::expression(@item) } | VARIABLE OP expression { &::expression(@item) } | INTEGER | VARIABLE { $::VARIABLE{$item{VARIABLE}} }