my %num = (15=>1, 20=>2, 25=>3, 30=>4); print $_, ' maps to ', $num{ ( 1 + int( ($_ - 1) / 5) ) * 5}, $/ for 10 .. 31 10 maps to Use of uninitialized value in print 11 maps to 1 12 maps to 1 13 maps to 1 14 maps to 1 15 maps to 1 16 maps to 2 17 maps to 2 18 maps to 2 19 maps to 2 20 maps to 2 21 maps to 3 22 maps to 3 23 maps to 3 24 maps to 3 25 maps to 3 26 maps to 4 27 maps to 4 28 maps to 4 29 maps to 4 30 maps to 4 31 maps to Use of uninitialized value in print #### for my $num (10,15,16,22,27,30,31) { print $num, $num{ ( grep{ $_ >= $num } sort{ $a <=> $b } keys %num )[0]}, $/; }