use strict; use warnings; use utf8; use Unicode::Collate::Locale; use Scalar::Util 'looks_like_number'; use feature qw/say unicode_strings/; binmode STDOUT, ':utf8'; my @unsorted = qw( 041351920234 Rabbit 0343120 041271024500 000000343119 0430870 Apple 041460301399 ); my $collator = Unicode::Collate::Locale->new(locale => 'en'); my @sorted = sort { ( looks_like_number($a) && looks_like_number($b) && $a <=> $b ) || $collator->getSortKey($a) cmp $collator->getSortKey($b) } @unsorted; say for @sorted;