#! perl -slw use strict; my %table; my $n=0; for my $c ('A' .. 'Z') { $table{ +sprintf '%s%03d', $c, ++$n } = int(10+rand 100); } my $allocated = 0; for my $school (sort keys %table) { my $needed = $table{$school}; next if $allocated + $needed > 400; print "$school:$needed"; last if ($allocated += $needed) >= 400; } print 'Total allocated: ', $allocated; __DATA__ c:\test>226210 A001:107 B002:72 C003:15 D004:59 E005:106 O015:34 Total allocated: 393