in reply to Opposite of strtol?
This one is longer than a oneliner. Let's call the stringification function from the gmp library.
First, make sure you have the gmp library and the headers for it installed, eg. if you have a debian linux system, install the libgmp3dev package.
Then make a directory called MathTobase1.0 and enter the following code to a file called Tobase.xs in it:
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <gmp.h>
MODULE = Math::Tobase PACKAGE = Math::Tobase
SV *
tobase(radix, num)
int radix
long num
CODE:
ST(0) = sv_newmortal();
if (2 <= radix && radix <= 62  36 <= radix && radix <= 2)
+{
mpz_t big;
mpz_init_set_si(big, num);
if (mpz_sizeinbase(big, radix) <= 70) {
char buf[72];
mpz_get_str(buf, radix, big);
sv_setpv(ST(0), buf);
}
mpz_clear(big);
}
Then enter the following to a file called lib/Math/Tobase.pm under the MathTobase1.0 directory (create the subdirectories):
package Math::Tobase;
require Exporter;
require DynaLoader;
our $VERSION = "1.00";
our @ISA = (Exporter::, DynaLoader::);
our @EXPORT = "tobase";
bootstrap Math::Tobase::;
1;
__END__
=head1 NAME
Math::Tobase  Convert integers to a string in any radix
=head1 SYNOPSIS
use Math::Tobase;
print tobase(16, 200), "\n"; # prints c8
=head1 DESCRIPTION
=over 4
=item tobase RADIX, INTEGER
Converts an integer to a string in any radix (number base),
returning a string.
The radix must be an integer between 2 and 62 or between 36 and 2,
inclusive.
If the magnitude of the radix is greater than 10 but at most 36,
lowercase letters a to z are used to indicate digits greater
than 9; however, if the radix is greater than 36
then digits between 10 and 35 are represented with uppercase,
and digits greater than 35 are represented with lowercase letters.
=back
=head1 INSTALLATION
This module requires the gmp (GNU MP) library,
which you can download from L<http://gmplib.org/>.
=cut
Then enter the following to the Makefile.PL file under the MathTobase1.0 directory.
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => "Math::Tobase",
VERSION_FROM => "lib/Math/Tobase.pm",
LIBS => ["lgmp"],
);
Now compile the code with the command
perl Makefile.PL && make
If all is successful, you can install the module now and get a Math::Tobase module with a tobase function that does what you want.
Try it out before installing using the command
perl I./lib Iblib/arch we 'use Math::Tobase; print tobase(13, 54),
+"\n";'
The output shall be 42.
Update 20110318: see also Re: Module for 128bit integer math? for a list of bigint modules. See also Re: Convert big number from decimal to hexadecimal where I reuse this code.
Update 20121016: note to self (as I reference this code frequently): you may want to use XSLoader.
Update 20131119: for more XS examples, see Re: Perl XS.
Re^2: Opposite of strtol? by syphilis (Chancellor) on Jun 22, 2009 at 00:09 UTC 
That's a nice little demo of how to set up a simple perl extension  though there are already a number of modules in existence that will do the conversion.
<plug>
Math::GMPz already uses the very same gmp library function:
perl MMath::GMPz=":mpz" wle "print Rmpz_get_str(Math::GMPz>new(54),
+ 13)"
</plug>
It's also available with Math::GMP, too (though the Math::GMP function we use is undocumented):
perl MMath::GMP=":constant" wle "print Math::GMP::get_str_gmp(54, 13
+)"
There are other modules, too, that one could use, but these are the only modules I know of that use the gmp library for the task.
Cheers, Rob  [reply] [d/l] [select] 

Wow, I didn't know there were interfaces to GMP other than Math::BigInt::GMP, and that one does not have an interface to this.
There's also Math::BaseCnv to print numbers in an arbitary base though.
 [reply] 
