in reply to Truth and Falsehood

Thanks for this useful node.

  • An empty array, which evaluates to the number of elements it contains, i.e. zero (0).
  • An empty hash, which evaluates to a false value when it is empty.

I've tested empty hashes on several perls here and they, like empty arrays, always appear to evaluate to zero as well. Is there a reason why you have expressed them differently here?

Replies are listed 'Best First'.
Re^2: Truth and Falsehood
by haukex (Archbishop) on Aug 17, 2019 at 10:12 UTC
    I've tested empty hashes on several perls here and they, like empty arrays, always appear to evaluate to zero as well. Is there a reason why you have expressed them differently here?

    Just because that's what the Perl documentation says. perldata:

    If you evaluate a hash in scalar context, it returns a false value if the hash is empty. If there are any key/value pairs, it returns a true value.

      I see - thank you. Interestingly the very next sentence in perldata is:

      A more precise definition is version dependent.

      which suggests that there may be some versions out there where the false value returned is not zero (or that there may be in future, intriguingly). I'll have to try to remember only to test the truth of empty hashes rather than their numerical value. :-)

        A more precise definition is version dependent. which suggests that there may be some versions out there where the false value returned is not zero

        That sentence was introduced along with the change that scalar(%hash) returns the same thing as 0+keys(%hash) instead of the bucket counts, so I suspect that's what it is referring to.

        But anyway, when the Perl documentation says "a false value" or "false", I don't make any assumptions of which of the possible false values it'll return :-)