{ my @to_b36 = (0 .. 9, 'A' .. 'Z'); my %to_num; @to_num{@to_b36} = 0 .. 35; sub b36_to_num { my $n = shift; my ($i, $s) = (0, 0); $s += $to_num{chop $n} * 36**$i++ while length $n; return $s; } sub num_to_b36 { use integer; # so that /= 36 is easy my $n = shift; my $s = ""; do { $s = $to_b36[$n % 36] . $s, $n /= 36 } while $n; return $s; } sub inc_b36 { num_to_b36(&b36_to_num + 1) } }