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
Use the delete
function:
# 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 ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access