in reply to Order of Precedence in Parse::RecDescent grammar

Here's my guess.

You have this:

expression: operand operator expression { [@item[1..3]] } |
This way, 3%2*4 can not be parsed as (3%2)*4 because according to the grammar, the left side of the operator must be an operand. 3%2 is not an operand, because it's not explicitly parenthisized.