my @sorted = sort byPrefix @s; # sort the keys numerically sub byPrefix { # make copies so originals are preserved my ( $x, $y ) = ( $a, $b ); # get prefixes $x =~ s/:.+//; $y =~ s/:.+//; # RV $_=0; $x < $y && $_--; $x > $y && $_++; $_; }