Recipe 5.4 Deleting from a Hash

5.4.1 Problem

You want to remove an entry from a hash so that it doesn't show up with keys, values, or each. If you were using a hash to associate salaries with employees, and an employee resigned, you'd want to remove their entry from the hash.

5.4.2 Solution

Use the delete function:

# remove $KEY and its value from %HASH delete($HASH{$KEY});

5.4.3 Discussion

Sometimes people mistakenly try to use undef to remove an entry from a hash. undef $hash{$key} and $hash{$key} = undef both make %hash have an entry with key $key and value undef.

The delete function is the only way to remove a specific entry from a hash. Once you've deleted a key, it no longer shows up in a keys list or an each iteration, and exists will return false for that key.

This demonstrates the difference between undef and delete:

# %food_color as per Introduction sub print_foods {     my @foods = keys %food_color;     my $food;     print "Keys: @foods\n";     print "Values: ";     foreach $food (@foods) {         my $color = $food_color{$food};         if (defined $color) {             print "$color ";         } else {             print "(undef) ";         }     }     print "\n"; } print "Initially:\n"; print_foods( ); print "\nWith Banana undef\n"; undef $food_color{"Banana"}; print_foods( ); print "\nWith Banana deleted\n"; delete $food_color{"Banana"}; print_foods( ); Initially: Keys: Banana Apple Carrot Lemon Values: yellow red orange yellow  With Banana undef Keys: Banana Apple Carrot Lemon Values: (undef) red orange yellow  With Banana deleted Keys: Apple Carrot Lemon Values: red orange yellow 

As you see, if we set $food_color{"Banana"} to undef, "Banana" still shows up as a key in the hash. The entry is still there; we only succeeded in making the value undef. On the other hand, delete actually removed it from the hash "Banana" is no longer in the list returned by keys.

delete can also take a hash slice, deleting all listed keys at once:

delete @food_color{"Banana", "Apple", "Cabbage"};

5.4.4 See Also

The delete and keys functions in perlfunc(1) and in Chapter 29 of Programming Perl; we use keys in Recipe 5.5



Perl Cookbook
Perl Cookbook, Second Edition
ISBN: 0596003137
EAN: 2147483647
Year: 2003
Pages: 501

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net