in reply to flattening Complex Datastructures

Your approach is really good if, all in all, what you need is to always reach the leaves of the tree --your structure is tree-like in fact

But, say you have a three-level hash. If you need to get an hash that lies in the middle, say /a/b your code soon gets complicated, while with real HoH you could simply write something like %b = %{$a->{b}}

But if you are ready to pay the tradeoff of slowness and complicateness, you probabily want to write a "driver" object, maybe one that you could tie your hashes to: you keep working with HoH on the front-end, and get with a flat hash on the back-end. But I'm not a tie expert so I can't tell if it is possible at all :-)

Cheers!
--bronto


The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
--John M. Dlugosz

Replies are listed 'Best First'.
Re: Re: flattening Complex Datastructures
by jdporter (Paladin) on Feb 11, 2003 at 17:43 UTC
    Your approach is really good if, all in all, what you need is to always reach the leaves of the tree
    Yep. How many times have we seen this question:
    I have a vector of keys, @keys = qw( foo bar none ); How can I easily get at the HoHoH element $h{foo}{bar}{none} ???
    If we use the perl4 approach to multidimensional hashes, instead of true nested hashes, it's simple:
    $h{@keys}
    ...one that you could tie your hashes to: you keep working with HoH on the front-end, and get with a flat hash on the back-end.
    Yes, that sounds very much like the Tie::Multidim module.

    jdporter
    The 6th Rule of Perl Club is -- There is no Rule #6.

      Ah!, now i get your original post. This is pretty cool.


      time was, I could move my arms like a bird and...