use warnings; use strict; my @courselist; my @text = 'UM|CS 34|Smith|34'; foreach my $try (@text){ my ($Institution, $CourseNumber, $Professor, $Enrollment) = split '|', $try; push @courselist, [$Institution, $CourseNumber, $Professor, $Enrollment]; }; @courselist = sort { $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1]} @courselist;