Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^2: Preventing autovivification while accessing value

by moritz (Cardinal)
on Jan 28, 2008 at 23:18 UTC ( #664809=note: print w/ replies, xml ) Need Help??


in reply to Re: Preventing autovivification while accessing value
in thread Preventing autovivification while accessing value

If the data is best represented that way, why not?

When you have a data structure that is by itself simpler, but doesn't represent your data very well, things can become more complicated than if you just the best fitting data structure in the first place - even if it's deeply nested.


Comment on Re^2: Preventing autovivification while accessing value
Re^3: Preventing autovivification while accessing value
by Herkum (Parson) on Jan 29, 2008 at 15:31 UTC

    He is solving one problem by trying to directly accessing the data, and then causing another problem because he has to deal with autovivification.

    The code becomes larger and harder to understand. I am also willing to bet that this sort of 'check' would be used in more than one place in his program. It should be abstracted out as method and named so that it makes senses in the context that it is being used.

    Another reason to avoid directly accessing deeply nested hashes is when you need to change the data structure. If you are accessing values directly, you end up changing a lot of code to use the new data structure. If it is hidden behind a method, then you only need to change the method to fix the program as a whole.

      You don't have to bet on something clearly stated. Everyone else who read my motivation in OP won't bet against you :-)

      Anyway, accessing deeply nested data is not the problem, neither is avoiding autovivification. I designed the data structure the way it was. I learn from the experience that structuring my database right would make me programming better.

      But I see some point in your statement, and I agree with that. That's why I put the code accessing the data directly in a method (somefunc() in my example). And I have other methods doing this, accessing different branch from the same tree. They all check carefully to avoid autovivification to avoid larger problem for the next check.

      Only those methods (in one class) need to access the data directly so client modules don't need to know the detail. The latter accomplish their tasks based on higher abstraction.


      Open source softwares? Share and enjoy. Make profit from them if you can. Yet, share and enjoy!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://664809]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2014-04-21 06:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (491 votes), past polls