while( keys %addedLow < keys %lowlevelH ){ for my $lowLevel ( keys %lowlevelH ){ if( exists $addedLow{$lowLevel} ){ next; } if( $mid{$midItem}{CNT} + $lowlevelH{$lowLevel} <= 35000 ){ push( @{$mid{$midItem}{LowLevel}}, $lowLevel ); $mid{$midItem}{CNT} += $lowlevelH{$lowLevel}; $addedLow{$lowLevel} = 1; } } $midItem++; }