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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |