# Searching an example for a defined hash value of a nonexisting hash key

#### Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

•  Subject
• Author
• Posted on
In "man perlfunc" I found:

-----
defined EXPR
....
When used on a hash element, it tells you whether
the value is defined, not whether the key exists
in the hash.
-----

Is it really possible to have a defined value on a
nonexisting key ? Can someone give a sample ?

If I want to print the defined values of a hash, do I have to prove
if the keys exists ? Up to now I just prove for a defined value
assuming that in this case the key must exists, i.e.

----
#!/usr/bin/perl
my %h;
....
print "Val=\$h\n" if defined(\$h);
----

or must I do:

----
print "Val=\$h\n" if (exists(\$h) and (defined(\$h));
----

## Re: Searching an example for a defined hash value of a nonexistinghash key

On Tue, 20 Jul 2004, Ralf Baerwaldt wrote:

> In "man perlfunc" I found:
>
> -----
> defined EXPR
> ...
> When used on a hash element, it tells you whether
> the value is defined, not whether the key exists
> in the hash.
> -----
>
> Is it really possible to have a defined value on a
> nonexisting key ? Can someone give a sample ?

No.  The point of that manual text is that a key/value pair can exist
without the value being defined.

As relates to Perl hashes, boolean truth implies defined, and defined
implies exists.

> If I want to print the defined values of a hash, do I have to prove
> if the keys exists ?

No.  If the value is defined, it exists.

This is a logical series of steps:
if (exists (\$hash)) {
print "key exists in hash\n";
if (defined (\$hash)){
print "key's value is defined in hash\n";
if (\$hash){
print "key's value is a true value\n";
} else {
print "key's value is false\n";
}
} else {
print "key's value is not defined, and therefore false\n";
}
} else {
print "key does not exist.  Value is therefore undefined and false\n";
}

HTH,
Paul Lalli