Hello, Monks!

I'm working with Parse::RecDescent and I'm facing a problem. At the first glance it seems like this problem was already covered in the official FAQ: How to commit in the optional subrule.

However, it doesn't seem to me like this trick does its job done. Here's the code to show what's wrong:

#!/usr/bin/perl use Parse::RecDescent; my $grammar = q( myrule : <rulevar: local $failed> myrule : 'stuff' mysubrule(?) <reject:$failed> | <error> mysubrule: 'ID' <commit> '[' ']' | <error?> { $failed++ } ); my $text = "stuff ID something"; my $parser = Parse::RecDescent->new($grammar) or die "hi"; my $tree = $parser->myrule($text); print $tree;

In this case parsing succeeds: mysubrule is committed, error directive is triggered but error message is never shown because mysubrule is optional in myrule.

If I change the $text variable to "stuff something", parsing fails: mysubrule isn't commited, error is not triggered, $failed is increased, and finally reject is triggered.

However from where I'm standing there's no sense in such behavior. What I'm trying to get it the opposite behavior where

Is there a way to achieve that?

I thought to ask the FAQ maintainer but its git repository is about two years old so I assume it is not maintained anymore. Thanks for your help and sorry for my English.


In reply to Parse::Recdescent optional subrule commit by campugnatus

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.