http://www.perlmonks.org?node_id=747319

kudra has asked for the wisdom of the Perl Monks concerning the following question:

It's been a few years since I used Parse::RecDescent, so it might be that my expectations are wrong, but I was under the impression that once some text had matched a rule, that same text would not be used to match a subsequent rule.

Excluding the actions that I take (printing the result) and the subrules (which are all regexes), the relationship between the rules is this:

start : (index pre risk) | (pre risk) risk : (risk1 | risk2) index : (pre1 | pre2 | pre3) pre : (pre1 | pre2 | pre3)
Most of my test cases match the 'index pre risk' pattern, often using the same pre# rule for both the index and pre matches. However, in 8 out of my 100 cases, the index and pre match are matching exactly the same line (as seen in both the output and $thisline).

Perhaps someone more familiar with P::RD could tell me if this is something they've seen before, and how I might prevent it.

Update: I do have a minimal test case, but because the sample data file is so large I don't want to attach it to this post.