use strict; use warnings; use List::Util qw(max); use Data::Dumper; my %h = (a=>2, b=>8, c=>7); my $max = max(values %h); for (keys %h) { delete $h{$_} unless $h{$_} == $max } print Dumper(\%h); __END__ $VAR1 = { 'b' => 8 };