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