| 112 | | my %defaults = ( |
| 113 | | day => 1, |
| 114 | | month => 1, |
| 115 | | year => 1, |
| 116 | | hour => 0, |
| 117 | | minute => 0, |
| 118 | | second => 0, |
| 119 | | nanosecond => 0 |
| | 112 | my %spec = ( |
| | 113 | day => { default => 1, range => [1, 31] }, |
| | 114 | month => { default => 1, range => [1, 12] }, |
| | 115 | year => {default => 1}, |
| | 116 | hour => {default => 0, range => [0, 23]}, |
| | 117 | minute => {default => 0, range => [0, 59]}, |
| | 118 | second => {default => 0, range => [0, 61]}, |
| | 119 | nanosecond => {default => 0, range => [0,undef]} |
| 121 | | while (my ($key, $value) = each %defaults) { |
| 122 | | $p{$key} = $value unless defined $p{$key}; |
| | 121 | |
| | 122 | while (my ($key, $spec) = each %spec) { |
| | 123 | my $default = $spec->{default}; |
| | 124 | $p{$key} = $default unless defined $p{$key}; |
| | 125 | |
| | 126 | if (my $range = $spec->{range}) { |
| | 127 | my $v = $p{$key}; |
| | 128 | if ( (defined $range->[0] && $v < $range->[0]) || |
| | 129 | (defined $range->[1] && $v > $range->[1]) ) { |
| | 130 | Carp::croak(qq|The '$key' parameter ("$p{$key}") to DateTime::Lite::new did not pass the range test|); # hmm, almost |
| | 131 | } |
| | 132 | } |