my @sorteddata = sort rulez1 @data; ... sub rulez1 { my $test; if ( $a->[0] =~ /^[0-9]*$/ && $b->[0] =~ /^[0-9]*$/ ) { $test = $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1]; } else { $test = $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1]; } return $test; }