<?xml version="1.0" encoding="windows-1252"?>
<node id="964526" title="Re^4: A question to iterator in Datetime::Event::Recurrence" created="2012-04-11 08:05:09" updated="2012-04-11 08:05:09">
<type id="11">
note</type>
<author id="917684">
vagabonding electron</author>
<data>
<field name="doctext">
Aye-aye, sir! :-) &lt;br&gt;
&lt;c&gt;
#!/usr/bin/perl
use strict;
use warnings;

use DateTime;
use DateTime::Format::Strptime;
use Datetime::Set;

# use Data::Dumper;

my $strp = DateTime::Format::Strptime-&gt;new(
					pattern =&gt; '%Y-%m-%d %T',
        );


my $datf = qq{2012-01-01 04:00:00};
my $datt = qq{2012-01-02 23:00:00};
		
my $start = $strp-&gt;parse_datetime($datf);
my $end = $strp-&gt;parse_datetime($datt);

while( $start &lt; $end ){
	
    print "$start\n" if $start-&gt;hour &gt; 6 and $start-&gt;hour &lt; 23;
	$start-&gt;add( hours =&gt; 1 );
}
&lt;/c&gt;

I had bad luck with an attempt over  &lt;c&gt;$set = DateTime::Set-&gt;from_recurrence&lt;/c&gt; however.&lt;br&gt;
This one:
&lt;c&gt;
$set = DateTime::Set-&gt;from_recurrence( 
        after =&gt; $start, 
        before =&gt; $end,
        recurrence =&gt; sub {
        return $_[0]-&gt;truncate( to =&gt; 'day' )-&gt;add( hours =&gt; 1 ) 
        }, 
    );
my $iter = $set-&gt;iterator;
while ( my $dt = $iter-&gt;next ) 
{
        print $dt-&gt;ymd;
};
&lt;/c&gt;
produced an infinite loop with the error message "iterator can't find a previous value". I intended to add later
&lt;c&gt;
my $set2 = $set-&gt;grep( 
        sub {
            return ( $_-&gt;hour &gt; 7 or  $_-&gt;hour &lt; 23);
        }
    );	
	
my $iter = $set2-&gt;iterator;
while ( my $dt = $iter-&gt;next ) 
{
        print $dt-&gt;ymd;
};
&lt;/c&gt;
&lt;br&gt;
Where is my mistake?&lt;br&gt;
Many thanks again - also for answering my previous question!&lt;br&gt;VE
</field>
<field name="root_node">
964486</field>
<field name="parent_node">
964496</field>
</data>
</node>
