I think you are meaning something like this (untested):

 sub sunrise_sunset  {
     my $class = shift;
     my $dt = shift;
     my $self = $class->_new( @_ );
     return DateTime::Set->from_datetimes(
             dates => $self->_current_rise_set->( $dt )
        );
 }

I believe a DateTime::Span would be a more useful return 
value, in this case.

- Flavio S. Glock


Hill, Ronald wrote:
> 
> Hi Flavio,
> 
> I'm stuck :(
> 
> I am trying to implement the changes that were discussed
> recently on the list and am running into problems.
> 
> Here is what I have tried:
> I have renamed the currect sunrise_sunset to
> _sunrise_sunset (easy)
> 
> then I wrote a new sunrise_sunset sub to accommodate
> the change request. Here is what I have:
> 
> sub sunrise_sunset  {
>     my $class = shift;
>     my $self = $class->_new( @_ );
>     return DateTime::Set->from_datetimes(
>             dates => sub {
>                     $self->_current_rise_set->($_[0]);
>             }
>        );
> }
> 
> Then I wrote another sub ( _current_rise_set)
> That has the following
> 
> sub _current_rise_set  {
>     my $self = shift;
>     my $dt   = shift;
>     croak( "Dates need to be DateTime objects (" . ref($dt) . ")" )
>       unless ( $dt->isa('DateTime') );
>     my ( $tmp_rise, $tmp_set ) = _sunrise( $self, $dt );
>     return [$tmp_rise, $tmp_set] ;
> 
> }
> 
> The idea is that I want to keep the current overall structure
> of the module. In order to do this I though that all I needed to do was
> to have the module return (as a set) the date of rise/set.
> So the users of the module would do something like this:
> 
> #!/usr/bin/perl
> use strict;
> use warnings;
> use DateTime;
> use DateTime::Event::Sunrise:
> 
> my $dt = DateTime->new( year   => 2003,
>                  month  => 12,
>                  day    => 01,
>              time_zone => 'America/Los_Angeles',
>              );
> 
> my $sun_set = DateTime::Event::Sunrise ->sunrise_sunset(
>                      longitude =>'-118' ,
>                          latitude => '33',
> );
> 
> then to generate the DateTime Set do this
> 
> my $dt_set = $sun_set->($dt);
> 
> Well, needless to say this does not work :(
> The reason is because the from_datetimes method does not
> accept a coderef (only an arrayref) Even if it did
> I still don't think it would work.
> 
> Is there a reason it only accepts a arrayref?
> ( it would be kinda cool if it did accept a coderef).
> 
> Anyway, if there is any insite you can provide it would be most
> helpful.
> 
> Thanks
> 
> Ron Hill

Reply via email to