%scores = ( "wibble<=90" => "A", ... ); #### $grade = ; ... foreach $grade (%scores) { #### foreach my $key (keys %hash) { ... } #### foreach my $value (values %hash) { ... } #### chomp (my $grade = ); $grade !~ /^\d+$/ and die "Input must be numeric!\n"; my %scores = ( A => sub { return $_[0] <= 90 ? 1 : 0 }, B => sub { return $_[0] <= 80 ? 1 : 0 }, C => sub { return $_[0] <= 70 ? 1 : 0 }, D => sub { return $_[0] <= 60 ? 1 : 0 }, # just a guess, otherwise like 'B' F => sub { return $_[0] >= 50 ? 1 : 0 }, # really? shouldn't that be '<=' ? ); my $result; foreach my $key (qw(D C B A F)) { if ($scores{$key}->($grade) ) { $result = $key; last; } } print $result,$/; #### chomp (my $grade = ); $grade !~ /^\d+$/ and die "Input must be numeric!\n"; # hash with upper threshold as keys my %scores = ( 90 => 'A', 80 => 'B', 70 => 'C', 60 => 'D', 50 => 'F', ); my $result; foreach my $key (sort keys %scores) { if ($grade <= $key) { $result = $scores{$key}; last; } } print $result, $/;