in reply to
DateTime::Event::ICal is probably what you want. Although it doesn't help with the specific (de)serialization issue (I don't know if RFC2445 date recurrences have a standardized written syntax), it will definitely help with calculating when the recurring events happen.
I would suggest having a standardized format (of your own creation, or as specified by RFC2445) for recurring events that you can easily parse into something to pass into the constructor for DateTime::Event::ICal. Then, you can query the DateTime::Set object it returns for all the dates in the recurrence between the first of the month and last of the month.