$NumOfPortsToGet = 10; local $loaded = 0; my %SortaHeapy = (); for my $key ( keys %Stats ) { ($key eq "UnauthOrigin") or SortaHeapy( $key ); } sub SortaHeapy{ my $key = shift; # if mini-heap not full just load it in if ( $loaded < $NumOfPortsToGet ) { $SortAHeapy{ $key } = $Stats{ $key }; $loaded++ return; } # otherwise do the degenerate heap sort/replace for my $hkey ( keys %SortaHeapy ) { if ( $SortaHeapy{ $hkey } < $Stats{ $key } ) { delete $SortaHeapy{ $hkey }; # replace SortaHeapy{ $hkey }; # but iterate the victim return } } }