On Wed, Mar 03, 2004 at 10:45:57AM -0300, Flavio S. Glock wrote: > * iterate > > This method apply a callback subroutine to all spans of a spanset. > > The callback parameter is a DateTime::Span. > > sub callback { > $_[0]->set_time_zone( $tz ); > } > > # assign a timezone to the spanset > $set->iterate( \&callback ); > > # create a new spanset with the new timezone, > # $set is unchanged > $set2 = $set->clone->iterate( \&callback ); > > If the callback returns undef, the span is removed from the set.
As an immediate reaction from someone who hasn't used any of the Set/Span modules, I don't like that last part. One, it's too easy for someone who only skims the documentation to miss it, and end up with a very subtle bug. Two, lots of functions return undef, so people are going to end up with ugly code like $set->iterate( sub { myfunc($_); 1 } ); just to avoid the effect. I think if you want to be able to modify the set, you should provide different methods for that. ->map and ->grep come to mind. I notice that this method with the same undef semantics already exists in Set, however it is marked experimental, so perhaps it can still change. Andrew