I'm using DateTime::Set to encode a radio station's program lineup. It's about 170 weekly recurrences that are all mostly about an hour apart. If I try to find the current event it's really slow and I get a pile of warnings from Set::Infinite. I can get the warnings to go away if I set $Set::Infinite::max_backtrack_depth to 52. I can get semi-reasonable performance for the ->current call if I restrict the set being queried to only the recent past. The warning: Set::Infinite: Backtrack too deep (more than 10 levels) at /home/josh/bin/perl/5.8.8/lib/site_perl/5.8.8/DateTime/Set.pm line 535 I'm hoping someone here can suggest a better way to do this, get better performance from the ->current query, avoid having to manually guess the range I'll find an answer in, and what's the deal with the warnings. # Look up whatever is current for a date/time. $THE_DATE = ... $all_events = DateTime::Set->empty_set->set_time_zone( 'US/Central' ) for ( ... ) $all_events = $all_events->union( DateTime::Event::Recurrence ->weekly( %$_ ) ->set_time_zone( 'US/Central' ) ) local $Set::Infinite::max_backtrack_depth = 52 # Set::Infinite, shut up! # Restrict $all_events to only the recent past because this makes the query faster $recent_past = $all_events->intersection( DateTime::Span->from_datetimes( from => $THE_DATE->clone->subtract( hours => 4 )->truncate( to => 'hour' ), end => $THE_DATE ) ) $CURRENT = $recent_past->current( $THE_DATE ) JoshThread Next