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

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

I am dealing with a data format that has a Pascal string representation like element to it. i.e. an integer followed a number of elements indicated by the leading integer. I'd like to encapsulate this within a Parse::RecDescent grammar using some of the magic from dynamically matched rules together with subrule repetition, but can't get it to work. Any recommendations? Code is below.
#!/usr/bin/perl use strict; use warnings; use Test::More tests => 5; use Parse::RecDescent; my $p=Parse::RecDescent->new(q{ rec: int elem("$item[1]") int: /\d+/ elem: /\S+/ }); ok($p->rec('0')); ok($p->rec('1 foo')); ok($p->rec('2 foo bar')); ok(!$p->rec('1')); ok(!$p->rec('1 foo bar'));
For now I am using the equivalent of:
rec: int elem(s?)
but that doesn't provide the check I want (i.e. the 4th and 5th tests fail) and is slower than I think it would be if I could specify the exact number of items to match.

Thanks, Les