| DateTime-Format-Natural documentation | Contained in the DateTime-Format-Natural distribution. |
DateTime::Format::Natural::Compat - Methods with more than one implementation
Please see the DateTime::Format::Natural documentation.
The DateTime::Format::Natural::Compat class defines methods which must retain
more than one possible implementation due to compatibility issues on certain
platforms.
Steven Schubiger <schubiger@cpan.org>
This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.
| DateTime-Format-Natural documentation | Contained in the DateTime-Format-Natural distribution. |
package DateTime::Format::Natural::Compat; use strict; use warnings; use boolean qw(true false); use DateTime (); our ($VERSION, $Pure); $VERSION = '0.07'; BEGIN { if (eval "require Date::Calc") { Date::Calc->import(qw( Add_Delta_Days Day_of_Week Days_in_Month Decode_Day_of_Week Decode_Month Nth_Weekday_of_Month_Year check_date check_time )); $Pure = false; } else { $Pure = true; } } sub _Add_Delta_Days { my $self = shift; if ($Pure) { my ($year, $day) = @_; my $dt = DateTime->from_day_of_year(year => $year, day_of_year => $day); return ($dt->year, $dt->month, $dt->mday); } else { my ($year, $day) = @_; return Add_Delta_Days($year, 1, 1, $day - 1); } } sub _Day_of_Week { my $self = shift; if ($Pure) { return $self->{datetime}->wday; } else { return Day_of_Week(@_); } } sub _Days_in_Month { my $self = shift; if ($Pure) { my ($year, $month) = @_; my $dt = DateTime->last_day_of_month(year => $year, month => $month); return $dt->day; } else { return Days_in_Month(@_); } } sub _Decode_Day_of_Week { my $self = shift; if ($Pure) { my ($day) = @_; return $self->{data}->{weekdays}->{$day}; } else { return Decode_Day_of_Week(@_); } } sub _Decode_Month { my $self = shift; if ($Pure) { my ($month) = @_; return $self->{data}->{months}->{$month}; } else { return Decode_Month(@_); } } sub _Nth_Weekday_of_Month_Year { my $self = shift; if ($Pure) { my ($year, $month, $weekday, $count) = @_; my $dt = $self->{datetime}->clone; $dt->set_year($year); $dt->set_month($month); $dt->set_day(1); $dt->set_day($dt->day + 1) while ($weekday ne $dt->dow); $dt->set_day($dt->day + 7 * ($count - 1)); return ($dt->year, $dt->month, $dt->day); } else { return Nth_Weekday_of_Month_Year(@_); } } sub _check_date { my $self = shift; if ($Pure) { my ($year, $month, $day) = @_; local $@; eval { my $dt = $self->{datetime}->clone; $dt->set(year => $year, month => $month, day => $day); }; return !$@; } else { return check_date(@_); } } sub _check_time { my $self = shift; if ($Pure) { my ($hour, $minute, $second) = @_; local $@; eval { my $dt = $self->{datetime}->clone; $dt->set(hour => $hour, minute => $minute, second => $second); }; return !$@; } else { return check_time(@_); } } 1; __END__