# Change the base representation of a non-negative integer use strict; sub GenerateBase { my $base = shift; $base = 62 if $base > 62; my @nums = (0..9,'a'..'z','A'..'Z')[0..$base-1]; my $index = 0; my %nums = map {$_,$index++} @nums; my $To = sub { 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; }; my $From = sub { my $rep = shift; my $number = 0; for( split //, $rep ) { $number *= $base; $number += $nums{$_}; } return $number; }; return ( $To, $From ); } =Example usage: my( $ToBase62, $FromBase62 ) = GenerateBase( 62 ); my $UniqueID = $ToBase62->( $$ ) . $ToBase62->( time ); my $hex = (GenerateBase(16))[0]; print $hex->( '28' ); =cut