package GradeSchool; use strict; use warnings; use Exporter qw; our @EXPORT_OK = qw; sub roster { my ( $students, $grade ) = @_; my @roster; my %student_by_grade; foreach my $student (@{ $students }) { push @{ $student_by_grade{$student->[1]} } => $student->[0]; } foreach my $student_grade (sort keys %student_by_grade) { if (not defined $grade or $student_grade == $grade) { push @roster => sort @{ $student_by_grade{$student_grade} }; } } return \@roster; } 1;