Easiest way to go from what you have, would be to add a for loop to cause you sub routine to loop the correct number of times.
#!c:/Perl/bin/perl # ----------------------------- # incrementing value in base 36 # ----------------------------- my %next = (); @next{('0'..'9','A'..'Z')} = ('1'..'9','A'..'Z','0'); print "Increment by what amount? \n"; chomp ($inc = <STDIN>); # <<<<< get inputted number. sub advance { my $num = shift; my @ar = split//,$num; for (my $x=0;$x<$inc;$x++) { # loop thru the number of time you inputted. $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"; } -----Original Message----- From: Selector, Lev Y [mailto:[EMAIL PROTECTED]] Sent: Friday, October 11, 2002 3:57 PM To: [EMAIL PROTECTED] Subject: incrementing values in base 36 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