Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Best Hash Practices?

by jettero (Monsignor)
on Oct 09, 2009 at 02:07 UTC ( [id://800143]=note: print w/replies, xml ) Need Help??


in reply to Best Hash Practices?

so ideally the perlish way of testing a value in a hash might be to do something like this:
if ($myHash{"unknown_if_this_key_exists_yet_or_not"}){...}
But the reality is that will not work because an entry for the key automatically gets created in the hash if we try to do that, so we end up having to do something like this instead

No it doesn't. Try it.

my %h; if( $h{"isn't there"} ) { 1 } print "$_\n" for keys %h; # does not print anything
The real question is, do you need to test true when $h{key} is set and false? Then you use exists rather than just a boolean test.

UPDATE re-reply: indeed. Well said.

-Paul

Replies are listed 'Best First'.
Re^2: Best Hash Practices?
by almut (Canon) on Oct 09, 2009 at 03:19 UTC
    The real question is, do you need to test true when $h{key} is set and false? Then you use exists rather than just a boolean test.

    Right.  Then, there's also defined, which is kind of "in between" testing for truth and existence.

    I'm sure you know, but maybe for others the following little truth table helps to summarize the relationships of what can be tested with a hash:

    sub truth_table { my $hash = shift; print " true? defined? exists?\n"; for my $key (qw(foo bar baz bla)) { print " $key "; printf " %-8d", $hash->{$key}; printf " %-8d", defined $hash->{$key}; printf " %-8d", exists $hash->{$key}; print "\n"; } } truth_table( { foo => 1, # true bar => 0, # false baz => undef, # undefined # bla # doesn't exist } ); __END__ true? defined? exists? foo 1 1 1 bar 0 1 1 baz 0 0 1 bla 0 0 0

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-04-25 20:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found