#! /usr/bin/perl use strict; use warnings; # use Getopt::Long; # use CGI; my @list = qw( chr10 chr10 chr10 chr10 chrY chrY chrY chr1 chr1 chr1 chrX chrX chrX chrX chr2 chr2 chr2 ); my @sorted = sort { my ( $strA, $numA ) = $a =~ m/(\D+)(\d+)?/; my ( $strB, $numB ) = $b =~ m/(\D+)(\d+)?/; if ( defined $numA && defined $numB ) { $strA cmp $strB || $numA <=> $numB } else { $strA cmp $strB } } @list; print join "\n", @sorted; __END__