Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Deleting undef values from a hash

by ysth (Canon)
on Dec 14, 2003 at 03:31 UTC ( #314609=note: print w/ replies, xml ) Need Help??


in reply to Deleting undef values from a hash

Not all undefs are created equal:

#!/usr/bin/perl -w use strict; use warnings; our %foo; @foo{'foo','baz'} = (); for my $key ('foo','bar','baz') { print "key $key ", (\undef == \delete $foo{$key} ? "didn't exist" : "existed"), "\n"; }
Doesn't work for tied hashes or magic hashes such as %SIG or %ENV.


Comment on Re: Deleting undef values from a hash
Download Code
Re: Re: Deleting undef values from a hash
by tilly (Archbishop) on Dec 14, 2003 at 23:25 UTC
    I think that you'll have a hard time finding that documented. ;-) (Though I have a pretty good idea why it works.)

    I also wouldn't want to trust it across Perl versions. That seems very specific to perl5, and I would not plan on that specific optimization finding its way into Ponie for instance.

      It should be ok for perl5, though. The division of responsibilities between hv_delete_* and pp_delete pretty much require that it work. hv_delete_* will return null if the key didn't exist, which pp_delete will replace with the immortal undef value. If the key did exist, hv_delete_* will return the value (even undef) in a different sv.

      It's obviously better practice to check exists in the first place, outside of obfuscation and golf.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (5)
As of 2014-09-20 05:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (153 votes), past polls