#!/usr/bin/perl use Date::Manip; use Data::Dumper; use strict; my $event_list = with_repeat_events('2003082500:00:00','2003082600:00:00'); print "Event List:\n"; print Dumper($event_list); sub with_repeat_events { my ($rec, $del1, $del2, $name); my $date1 = shift; $date1 = ParseDate($date1); my $date2 = shift; $date2 = ParseDate($date2); my $event_list = Events_List($date1, $date2); # Lets turn $event_list into a hash my @tmp = @{$event_list}; my %ret; while(@tmp) { my $a = shift @tmp; my $b = shift @tmp; $ret{$a} = $b; } @tmp = @{$Date::Manip::Events{recur}}; while (@tmp) { my $date1_tmp = $date1; my $date2_tmp = $date2; my @dates = (); my $rec = shift @tmp; my $del1 = shift @tmp; my $del2 = shift @tmp; my $name = shift @tmp; my ($recur0,$recur1,$flags,$dateb,$d0,$d1)=Date::Manip::Recur_Split($rec); $date1_tmp = $d0 if($d0 && Date_Cmp($date1_tmp,$d0) < 0); $date2_tmp = $d1 if($d1 && Date_Cmp($date2_tmp,$d1) > 0); @dates = ParseRecur($rec,$date1_tmp,$date1_tmp,$date2_tmp); foreach my $d (@dates) { push @{$ret{$d}}, $name; } } # Sort them AND take into account the "!$name" entries. my(%tmp,$date,@tmp2,@ret,@d, $tmp); @d=sort { &Date_Cmp($a,$b) } keys %ret; foreach $date (@d) { my %tmp; @tmp=@{ $ret{$date} }; @tmp2=(); foreach $tmp (@tmp) { push(@tmp2,$tmp), next if ($tmp =~ /^!/); $tmp{$tmp}=1; } foreach $tmp (@tmp2) { $tmp =~ s/^!//; delete $tmp{$tmp}; } push(@ret,$date,[ keys %tmp ]); } return \@ret; } #my $rec = '0:1*0:13:0:0:0**today*1/1/2003*12/31/2003'; #my $rec = '0:1*0:13:0:0:0'; #my @dates = ParseRecur($rec,0,'1/1/2003','12/31/2003'); #print "FULL: " . ParseRecur($rec,'today','1/1/2003','12/31/2003'); #print Dumper(@dates); =cut @tmp=@{ $Events{"recur"} }; RECUR: while (@tmp) { ($rec,$del0,$del1,$name)=splice(@tmp,0,4); if (&Date_Cmp( @d=(); }