Boy, there is a huge difference in performance between Date::Manip::Date and Time::Piece ...
[user@host newload]$ ./t-benchdates.pl 500
Benchmark: timing 500 iterations of Date::Manip::Date, Time::Piece...
Date::Manip::Date: 124 wallclock secs (119.35 usr + 1.30 sys = 120.65
+ CPU) @ 4.14/s (n=500)
Time::Piece: 5 wallclock secs ( 3.88 usr + 0.03 sys = 3.91 CPU) @ 1
+27.88/s (n=500)
Certainly a code change I will be making but that leaves the foreach loop through all available ranges as a massive performance hit still ...