The solution

Using Calendar::Simple written by Dave Cross, I provided a quick and dirty answer. It did the job, but was very limited to the originally posted question. After a bit of thought I expanded it to be slightly more generic.