use strict; use Data::Dumper; my @text = ; my @courselist; my $LastCourseNumber; for (@text) { my ( $Institution, $CourseNumber, $Professor, $Enrollment ) = split /\|/; last unless ( $CourseNumber && $Institution); if ($CourseNumber ne $LastCourseNumber) { push @courselist, [ $Institution, $CourseNumber, $Professor, $Enrollment]; $LastCourseNumber = $CourseNumber; } } print Dumper( \@courselist ); @courselist = sort { $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] } @courselist; print Dumper( \@courselist ); __DATA__ UM|CS 34|Somebody|3 AC|PHIL 13|Another Person|8 UM|BIO 567|Someone Else|20