use bigint; my $n = 123456789123456; my ($h, $d); while ($n > 0) { $d = $n % 16; $n /= 16; $h .= sprintf "%x",$d; } print scalar reverse $h;