At TPC, we got a new version of Date::ICal out. Actually,
about 3 of them. This was a complete rewrite of Date::ICal,
in order to change the internals around and make it easier
to work with.
The internals were icky, contained a lot of redundant code,
and stored the date in several formats at the same time. So
if you changed one, you had to make sure to go around and
change all the others also.
Now there's just one authoritative internal format, and the
other attributes are calculated from that.
Two changes that are still under consideration are:
1) Use Memoize to make sure that we are not recalculating
the same stuff over and over. For example, when you call
$obj->ical, it calls $obj->year, $obj->month, and $obj->day.
Each of those, in turn, calls parsedays to get that
attribute frome the julian date. That's just silly, since
you end up parsing the date three times to get the ical
string. Using Memoize will remove that, and speed things up
by 3 in a lot of places.
2) Split the date/time floating point number into a date
integer, and a time integer. We're getting round-off errors
of a second, and that's just not acceptable. Splitting into
two values will remove the roundoff, and be accurate for
another 100,000 years or so. Should be sufficient.