sub natural_sort { my $i; s/(\d+)/pack 'aNa*', 0, length $1, $1/eg, $_ .= ' ' . $i++ for ( my @x = @_ ); @_[ map { (split)[-1] } sort @x ]; } print join ', ', natural_sort( map {"E$_"} (1..20) );