my @data while (my $line = ) { my @elements = split /,/, $line; push @data, \@elements; # need to store as ref } @data = sort { $$a[2] cmp $$b[2] or $$a[0] <=> $$b[0] } @data; # cmp and <=> are string and numerical comparison operators, # respectively; if the left hand arg is less than the right, # they return -1, if equal, 0, and otherwise 1, so if the # 3rd column of the array is the same, we get a 0, which # triggers the 'or' and the second comparison open OUTFILE, ">$outfile" or die $!; foreach my $item (@data) { print OUTFILE join ',', @$item; print OUTFILE "\n"; }