Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^3: How come undef eq '' ??

by tmharish (Friar)
on Jan 30, 2013 at 17:23 UTC ( #1016112=note: print w/ replies, xml ) Need Help??


in reply to Re^2: How come undef eq '' ??
in thread How come undef eq '' ??

Struggling with this:

my $data ; $data = ref($hash) eq 'HASH' ? $$hash{$name} : $hash ; $data = $$data{CONTENT} if ref($data) eq 'HASH' ;
There is some circular reference also ... Guess I have to stick with catching __WARN__


Comment on Re^3: How come undef eq '' ??
Download Code
Re^4: How come undef eq '' ??
by LanX (Canon) on Jan 30, 2013 at 17:28 UTC
    I don't get a warning, so whats the problem?

    Cheers Rolf

      Sorry ... dint get that.

      Warning on the code chunk or the Module?

Re^4: How come undef eq '' ??
by muba (Priest) on Jan 31, 2013 at 01:45 UTC

    This code feels... itchy... to me. No offense ;)

    Let's assume ref($hash) ne 'HASH', then $data = $hash, so ref($data) will never eq 'HASH', so that statement modifier on the last line is redundant in this case.

    However, say ref($hash) eq 'HASH' is true, then $data = $$hash{$name}, and then $data = $$data{CONTENT} provided that $$hash{$name} is a hashref. For the sake of argument, let's say it isn't. Then $data will still be $$hash{$name}. Is that how it's supposed to work?

      This code feels... itchy... to me. No offense ;)

      None Taken!

      The idea of this bit is to extract the next level of an XML tree ( stored in a hash, in this case $hash )

      So if ref( $hash ) ne 'HASH' then we are at a leaf and $hash is the actual value and not a sub-tree, and hence the $data = $hash ( now they are both scalar )

      On the other hand, if ref($hash) eq 'HASH' then we are dealing with a sub-tree - so $data = $$hash{$name} is fine.

      There is, however, one exception, and that is when '$hash' contains the key 'CONTENT' like so: $$hash{ CONTENT }. In that case $$hash{ CONTENT } is not a sub-tree but a place holder for the actual data and hence the  $data = $$data{CONTENT}

      Of course this requires that CONTENT is never a key in our hash (although it might be a node in the XML) - but that is achieved during parsing of the XML into the hash.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2014-08-23 17:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (175 votes), past polls