On Thu, 29 May 2003, Ben Bennett wrote:
> Actually there are two bugs (yes my sandbox is current).
>
> The first is fixed by the patch below (it creates an unused $tmp
> DateTime::Span object without the required args).
>
> The second is more tricky... DT::Span tries to create a DT::Set
> object, but doesn't use DT::Set. This is nasty to fix since DT::Set
> uses DT::Span, so you don't want to make a circular dependency. I am
> not sure how best to fix this.
There's no such thing as a circular dependency in Perl. Two modules can
use each other.
> A script to catch this is:
>
> ---
> use DateTime;
> use DateTime::Span;
>
> my $low_date = DateTime->new(year => 2002, month => 3, day => 1);
> my $high_date = DateTime->new(year => 2002, month => 2, day => 11);
> my $test_date = DateTime->new(year => 2002, month => 2, day => 23);
>
> # Make sure the high is higher than the low
> ($low_date, $high_date) = ($high_date, $low_date)
> if $low_date > $high_date;
>
> # Make the span (note that we don't need to flip the dates)
> my $span = DateTime::Span->from_datetimes(start => $low_date,
> end => $high_date);
>
> if ($span->contains($test_date)) {
> print '$test_date is between the given dates';
> }
I fixed this.
> Index: lib/DateTime/Span.pm
> ===================================================================
> RCS file: /cvsroot/perl-date-time/modules/DateTime-Set/lib/DateTime/Span.pm,v
> retrieving revision 1.20
> diff -u -r1.20 Span.pm
> --- lib/DateTime/Span.pm 8 May 2003 00:35:32 -0000 1.20
> +++ lib/DateTime/Span.pm 30 May 2003 02:36:20 -0000
> @@ -159,7 +159,7 @@
> sub intersects {
> my ($set1, $set2) = @_;
> my $class = ref($set1);
> - my $tmp = $class->new();
> + my $tmp = {}; # $class->new();
> $set2 = DateTime::Set->new( dates => [ $set2 ] ) unless $set2->can( 'union' );
> return $set1->{set}->intersects( $set2->{set} );
> }
> @@ -167,7 +167,7 @@
> sub contains {
> my ($set1, $set2) = @_;
> my $class = ref($set1);
> - my $tmp = $class->new();
> + my $tmp = {}; # $class->new();
> $set2 = DateTime::Set->new( dates => [ $set2 ] ) unless $set2->can( 'union' );
> return $set1->{set}->contains( $set2->{set} );
> }
You'll note $tmp was not used at all. I removed it.
-dave
/*=======================
House Absolute Consulting
www.houseabsolute.com
=======================*/