1nickt solved my problem here, but I'll supply this anyway for the benefit of future readers.

$root is actually @child_tokens, an array of hashes describing the tokens which have been produced from the present token and may still need expanding. This is, as you may have guessed, part of a recursive-descent parser I'm writing by hand (it's my first, I'm giddy).

Each hash in @child_tokens looks like this before it's been expanded:

{ 'kind' => 'token', 'type' => 'command', 'children' => undef, 'location' => undef, 'length' => undef, 'state' => 'unexpanded', }

What I'm working on is filling in 'location' and 'length'. The idea is that a token learns its location just before it is expanded, and learns its length after all its children have been expanded. The token's location is the sum of its parent's location with the lengths of each sibling token that comes before it (each of which, having been expanded, knows its length).

This question was about getting the sum of those siblings' lengths. Each length, from my current scope, would be accessed with ${$child_tokens[$index]}{'length'}. The trick was to get $index to range from 0 to the index of the previous token. And map has indeed done just that!


In reply to Re^2: How I can collect values out of complex tree structure that are located at chained keys matching a pattern? Without using a loop, that is. by Anonymous Monk
in thread How I can collect values out of complex tree structure that are located at chained keys matching a pattern? Without using a loop, that is. by Anonymous Monk

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.