Hello, I have integer numbers represented in base 36 (each digit may have one of 36 values: ('0'..'9','A'..'Z')). For example: '5BFHK'. I need to increment the number by 1 or by some step (for example, by 25). Here is my first take on incrementing by 1:
# ----------------------------- # incrementing value in base 36 # ----------------------------- my %next = (); @next{('0'..'9','A'..'Z')} = ('1'..'9','A'..'Z','0'); sub advance { my $num = shift; my @ar = split//,$num; $ar[-1] = $next{$ar[-1]}; if($ar[-1] eq '0'){ my $flag=1; for my $n (2..@ar) { $ar[-$n] = $next{$ar[-$n]}; if($ar[-$n] ne '0') {$flag=0;last;} } unshift(@ar,'1') if($flag); } return join "", @ar; } for (qw(5BFHK 111Z ZZZZ)) { print "\n$_\n",advance($_),"\n"; } __END__ outputs: 5BFHK 5BFHL 111Z 1120 ZZZZ 10000 Any advice? Warmest Regards, Lev Selector, NY, (212) 902-3040