use List::Util qw{min}; my @order = '0' .. '9', 'A' .. 'Z'; # range of 2^36 is probably enough sub to_string { my($max, $list) = @_; return join '', map { defined($_) ? $order[min($_, $max)] : '.' } @$list; }