in reply to 64-to-56-bit truncation?

If you've built with 64-bit integers but haven't built with long doubles (or your platform doesn't have long doubles) this will often happen. For almost everything perl does mathematically, it tends to promote integers to floating point numbers. If, unfortunately, the floating point number type your perl is using has fewer bits of precision than the integer you're using, you'll see lower bits go away.

use integer; will solve this to some extent, as it stops promotion while its in scope, but the only solution is to build perl with 64 bit integers and larger than 64 bit doubles.