note
shmem
<blockquote><i>
</i></blockquote>
<p>As [poj] [id://1197781|says]. Heh... didn't know that there's a module for that. This is what I have in my toolbox
</p>
<code>
my %hash;
my @chars = (0..9,'A'..'Z','a'..'z',map{chr$_}32..47,58..64,91..96);
@hash{@chars} = 0..$#chars;
sub encode_base {
my ($base,$num) = @_;
my ($rem,@ret);
while ($num) {
push @ret, $chars[($rem = $num % $base)];
$num -= $rem;
$num /= $base;
}
return join '', reverse @ret;
}
sub decode_base {
my ($base, $str) = @_;
my $num;
$num = $num * $base + $hash{$_} for $str =~ /./g;
$num;
}
</code>
<p>which is basically the same, but lets you encode/decode with a base up to 91. So,</p>
<code>
my $number = decode_base 36, 1009;
say lc encode_base 36, $number++ for 0..36;
</code>
<p>does what you want. Also, these subs can be used to convert from decimal to binary, octal, hex and reverse, using 2, 8 and 16 as base. But I'd use the perl builtins for that ;-)</p>
<div class="pmsig"><div class="pmsig-510280">
<small>perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'</small>
</div></div>
1197777
1197777