I'm interested to get the log10 of a whole number
(IIRC) Unless that number is a power of ten, the log10 is going to be irrational. This mean you wouldn't even be able to get an exact value by using Rationals (that's the definition). Best you can do to have an "exact value" would be something like:
sub log10 {
sprintf("%e", $_[0]);
print "log10($_[0]) = $2 + log10($1)"
}
where you can drop the right side of the addition when $1 == 1.0. Oh and the right side is guaranteed to be in [0;1)
Edit: I suppose POSIX's log10, as demonstrated by pryrt does give the correct answer for the special cases that are powers of ten. But it's still going to give an approximation for all other numbers.