http://www.perlmonks.org?node_id=929996


in reply to Re^2: If exists (hash)
in thread If exists (hash)

My basic question is how to print a hash key that will only be there in some records. I thought the "if exists" might work but it clearly doesn't.

Um, your code fragment is incomplete, it does not demonstrate "if exist" not working

See Access Hashes of Hashes etc. and Re^2: Unique value count in hash not working properly

$ perl -Mstrict -e " my $foo = { 1, 1 }; exists $foo->{1}{2} " Can't use string ("1") as a HASH ref while "strict refs" in use at -e +line 1.

Replies are listed 'Best First'.
Re^4: If exists (hash)
by packetstormer (Monk) on Oct 06, 2011 at 15:09 UTC
    Thanks for replying. I did read those threads (in fact I started one of them) but still being relatively new to perl I am having trouble. I notice the following:

    My code will retrieve XML results from a web page. The value below will always have data:

    $xml->{result}->{covers}

    Mostly it will be just a folder path. However, sometimes it could be more than one path in which case the following is returned:

    'result' => { 'covers' => {'1' => {'content' => '/mypath/nevr/9smith/' }, '2' => {'content' => '/mypath/nevr/9-dssmith/' }

    So when the XML appears I should look for $result->{covers}->{1}->{content}
    but this is where the error appears. I'm gonna read up some more and maybe I'll figure it out.
    Thanks for the replies though.
      I guess you want to check 'HASH' eq ref $xml->{result}{covers}
        Excellent! Thanks. I didn't know anything about "ref" but that is exactly what I needed. I can now do a check to see if its a value of a hashref and then do as I need from there.
        Thanks very much! Working perfect now!

      . I'm gonna read up some more and maybe I'll figure it out.

      Or you could simply use Data::Diver and be done with it