This code resembles a standard DateTime::Event module implementation. http://datetime.perl.org/developer/event.html
I think 95% of the work could be done by reusing one of these modules: DateTime::Set "from_recurrence" method - to start from scratch DateTime::Event::Recurrence DateTime::Event::ICal DateTime::Format::ICal - highest level of abstraction If you are planning on using a database backend, I'd suggest you base your implementation on DateTime::Set "from_recurrence". > The psuedo-code algorithm for DateTime::Business functions looks like > > sub add_business_days { > my ($self, $days) = @_; > return $self->crement_business_days(days); > } > > sub subtract_business_days { > my ($self, $days) = @_; > return $self->crement_business_days(days*-1); > } > > sub crement_business_days { > my ($self, $days) = @_; > ## This duration could be a static class member to save time and space > my $duration=DateTime::Duration->new( days => 1); > > my $crement = $days/abs($days); > while ($days) { > $crement > 0 ? $self->add_duration($duration) : > $self->subtract_duration($duration); > $days -= $crement; > ## This is the part that skips non-business days by doing the > 'crement w/o adjusting the $days_to_crement. > while (!$self->is_a_business_day()) { > $crement > 0 ? $self->add_duration($duration) : > $self->subtract_duration($duration); > } > return $self; > } - Flavio S. Glock