my @old = qw(99B 99 99A 100A 100 101 88); my %data; foreach my $data ( @old ) { ( my $sort= $data ) =~ s/(0*)(\d+)/ pack("C",length($2)) . $1 . $2 /ge; $data{$sort}= $data; } print "$data{$_}\n" for sort keys %data;