$students{0354} = "Fred\t3.2"; $students{4873} = "Tom\t2.9"; $students{1522} = "Susan\t4.0"; #### foreach $key(sort GPA_sort %students) { #etc } #### sub GPA_sort { $value_a = $students->{$a}; $value_b = $students->{$b}; ($name_a, $gpa_a) = split(/\t/, $value_a); ($name_b, $gpa_b) = split(/\t/, $value_b); $gpa_a <=> $gpa_b }