http://www.perlmonks.org?node_id=720148


in reply to Base Conversion Utility

I had need of this recently, but the syntax is overly complicated. The use of code refs is unnecessary.
{ my @nums = (0..9,'a'..'z','A'..'Z'); my %nums = map { $nums[$_] => $_ } 0..$#nums; sub to_base { my $base = shift; my $number = shift; return $nums[0] if $number == 0; my $rep = ""; # this will be the end value. while( $number > 0 ) { $rep = $nums[$number % $base] . $rep; $number = int( $number / $base ); } return $rep; } sub fr_base { my $base = shift; my $rep = shift; my $number = 0; for( $rep =~ /./g ) { $number *= $base; $number += $nums{$_}; } return $number; } }

You examples becomes

my $UniqueID = to_base( 62, $$ ) . to_base( 62, time );
print to_base( 16, 28 );

If you need your original syntax for some reason, just add

sub GenerateBase { my $base = shift; return ( sub { to_base( $base, $_[0] ) }, sub { fr_base( $base, $_[0] ) }, ); }

Then the user has the choice of syntax at no cost.