Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^3: Preventing autovivification while accessing value

by Herkum (Parson)
on Jan 29, 2008 at 15:31 UTC ( #664912=note: print w/replies, xml ) Need Help??

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

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.

  • Comment on Re^3: Preventing autovivification while accessing value

Replies are listed 'Best First'.
Re^4: Preventing autovivification while accessing value
by naikonta (Curate) on Jan 30, 2008 at 02:59 UTC
    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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://664912]
and a kettle whistles...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2017-12-16 20:03 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (458 votes). Check out past polls.