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.

Replies are listed 'Best First'.
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 exploiting the Monastery: (5)
As of 2016-06-28 10:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My preferred method of making French fries (chips) is in a ...











    Results (356 votes). Check out past polls.