Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
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 having an uproarious good time at the Monastery: (10)
As of 2015-07-06 18:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (80 votes), past polls