Yes, Data::Float (which had slipped my mind at the time) is worth a mention here.
It also provides nextup, nextdown and nextafter functions.
Be aware that the outputs you're getting provide insufficient precision - eg the approximation 4.44089209850063e-016 instead of the accurate 4.4408920985006262e-16.