Don't ask to ask, just ask | |
PerlMonks |
Re: Trees and Language::AttributeGrammarby nothingmuch (Priest) |
on Mar 06, 2006 at 17:56 UTC ( [id://534724]=note: print w/replies, xml ) | Need Help?? |
First of all, the fix is this:
As you can see mentioning $/, the attribute's invocant fixes this. You're probably asking yourself why... Comparing the two versions shows us something interesting: versus So, what is the void thingy doing in there, you are probably wondering? Aha! Basically, $_AG_SELF causes the value to remain non-garbage collected (since it's captured in the closure it's reference count stays up). Since luqui is using a lazy evaluation strategy to produce results, and this probably means that somewhere inside $_AG_ATTR or whatever there's a table of objects to their attr values, the moment that $_AG_SELF dies (and it will die, because you are creating Cons thingies on the fly inside 'children') it can no longer be referenced in a thunk, because it's StrVal cannot be reproduced. Anyway, long story short, the evaluation scheme is somehow landing on an edge case with two children in the Cons/Nil thing, and thus it's causing the value to be recalculated over and over and over and over again. I think. The more elegant fix is to cache your linked list, something like so that the values don't go away. Remember to invalidate _ll_cache whenever new children are added. Ciao!
-nuffin zz zZ Z Z #!perl
In Section
Seekers of Perl Wisdom
|
|