my @unsorted_data; while () { my @fields = /([\d.]+)/g or next; push(@unsorted_data, \@fields); } my @sorted_data = sort { $a->[1] <=> $b->[1] || $a->[0] <=> $b->[0] } @unsorted_data; print("(($_->[0] $_->[1]) ($_->[2] $_->[3]))\n") foreach @sorted_data;