I often use perl "hierarchical data structures" which consist of multi-level hashes of hashes of things as a way to initialize and drive algorithms. One of the pitfalls of this approach is that it's easy to specify a structure which runs afoul of the assumptions of the code. Because of this, I find I write little ad hoc "structure checkers" which first check the structure for validity against my assumptions.

It finally occurred to me that what I need is some way in perl to specify a compact grammar, and then execute a checker: check ($grammar, $structure), and have it output a useful error pointing to the part of the structure which fails the check.

One has tools that do this, for example, for XML (e.g. schema validity checker).

I'm guessing someone has thought of this ages ago and there is some cool library that does this for perl structures. It's best if the solution is tailored specifically to perl structures, and is simple, rather than using some external, generalized grammar tool.


In reply to "Schema" specifier for perl in memory structures by zerohero

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.