#!perl use strict; my @in = qw( CC1180 B130 A250 Z9 B1105 B1225 B2480 C1180 C1600 D1180 D130 D250 e1180 eF855 EF855 Ef855 E975 ERR 123); my %out = (); for (@in){ if (/^([A-Za-z]+)(\d+)$/){ # build hash of arrays # with alpha part uppercase:original as key push @{$out{join ':',uc $1,$1}},$2; } else { warn "Input data error $_"; } } for my $x (sort keys %out){ my @x = split ':',$x; # split uc from original for my $y (sort {$a <=> $b}@{$out{$x}}){ print "$x[1]$y\n"; } }