use strict; use warnings; sub naturalSort { my$i;s/(\d+)/pack"aNa*",0,length$1,$1/ge,$_.=$".$i++for # 345678 1 2345678 2 2345678 3 2345678 4 2345678 5 2345 my@x=map{lc}@_;@_[map{(split)[-1]}sort@x] #8 6 2345678 7 2345678 8 2345678 9 234567 } my @data= ; chomp @data if $\; print for naturalSort(@data); __END__ amsTerdam40 amstelveen 1 AmstErdam5 Amsterdam amsterDamed A