use strict; use warnings; use List::Util qw(sum); use constant OFFS => 1 - ord 'a'; use constant BASE => ord("z") - ord("a") + 1; sub alphabetic_to_base10 { local $_ = reverse shift; my $fac = 1; sum map +( (OFFS+ord $_)*$fac, $fac*=BASE )[0], /./g; } printf "$_: %d\n", alphabetic_to_base10($_) for qw[a z aa az ba zz aaa zba]; __END__ a: 1 z: 26 aa: 27 az: 52 ba: 53 zz: 702 aaa: 703 zba: 17629