use List::Util qw[ reduce ]; ... my $hdata = ; my( $rating, $bwurl ) = @{ reduce{ if( $hdata->{$b}{Season} == $seasonnum && $hdata->{$b}{Rating} > $a->[0] ){ $a->[0] = $hdata->{$b}{Rating}; $a->[1] = $hdata->{$b}{BannerPath} } } [ 0, '' ], keys %hdata };