my $hdata = ; my ($rating, $bwurl) = 0; foreach my $id ( keys %$hdata ) { if($hdata->{$id}{Season} == $seasonnum && $hdata->{$id}{Rating} > $rating){ $rating = $hdata->{$id}{Rating}; $bwurl = $hdata->{$id}{BannerPath}; } } #### 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 };