<?xml version="1.0" encoding="windows-1252"?>
<node id="711922" title="Re^5: How to grab Parse::RecDescent error output in a variable?" created="2008-09-17 04:21:00" updated="2008-09-17 00:21:00">
<type id="11">
note</type>
<author id="399589">
w-ber</author>
<data>
<field name="doctext">
&lt;p&gt;
Done, and also received feedback already! Here's the bug report: [https://rt.cpan.org/Ticket/Display.html?id=39323]
&lt;/p&gt;

&lt;p&gt;
And here's the solution I was seeking, based on &lt;code&gt;demo/demo_errors.pl&lt;/code&gt;:
&lt;/p&gt;

&lt;code&gt;
use strict;
use Data::Dumper;
use Parse::RecDescent;

# Simple Lisp S-expressions (as an example)
my $grammar = q#
    start: expression(s?)
         | { die join("\n", map { $_-&gt;[0] } @{ $thisparser-&gt;{errors} })."\n" }

    expression: /\w+/ 
              | '(' expression(s?) ')'
                { $item[2] }
              | &lt;error&gt;
#;

my $p = Parse::RecDescent-&gt;new($grammar);
# This will die if there is an error.
print Dumper($p-&gt;start('(foo (bar))'));

# Like so:
$p-&gt;start('(foo');
&lt;/code&gt;

&lt;div class="pmsig"&gt;
&lt;div class="pmsig-399589"&gt;
&lt;p&gt;
-- &lt;br&gt;
say "Just Another [href://http://prometheus.frii.com/~gnat/yapc/2000-stages/slide36.html|Perl Hacker]";
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</field>
<field name="root_node">
710640</field>
<field name="parent_node">
711504</field>
</data>
</node>
