my @data while (my $line = ) { my @elements = $line; push @data, \@elements; # need to store as ref } @data = sort { $$a[2] cmp $$b[2] or $$a[1] <=> $$b[1] } @data or die "can't sort"; foreach my $item (@data) { print TEMPFILE @$item; print TEMPFILE "\n"; }