Deleting from a Hash
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.
Solution
# remove $KEY and its value from %HASH delete($HASH{$KEY});
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"};
See Also
The delete and keys functions in perlfunc (1) and in of Perl Programming; we use keys in
|
|
|
| Testing for the Presence of a Key in a Hash |
| Traversing a Hash |



