File Coverage

blib/lib/Date/Language.pm
Criterion Covered Total %
statement 47 48 97.9
branch 8 18 44.4
condition 8 12 66.6
subroutine 9 10 90.0
pod 1 2 50.0
total 73 90 81.1


line stmt bran cond sub pod time code
1              
2             package Date::Language;
3              
4 3     3   1309 use strict;
  3         10  
  3         72  
5 3     3   419 use Time::Local;
  3         1991  
  3         128  
6 3     3   14 use Carp;
  3         4  
  3         158  
7 3     3   15 use vars qw($VERSION @ISA);
  3         7  
  3         801  
8             require Date::Format;
9              
10             $VERSION = "1.10";
11             @ISA = qw(Date::Format::Generic);
12              
13             sub new
14             {
15 8     8 0 1556 my $self = shift;
16 8   33     24 my $type = shift || $self;
17              
18 8         63 $type =~ s/^(\w+)$/Date::Language::$1/;
19              
20 8 50       35 croak "Bad language"
21             unless $type =~ /^[\w:]+$/;
22              
23 8 50       456 eval "require $type"
24             or croak $@;
25              
26 8         52 bless [], $type;
27             }
28              
29             # Stop AUTOLOAD being called ;-)
30       0     sub DESTROY {}
31              
32             sub AUTOLOAD
33             {
34 3     3   18 use vars qw($AUTOLOAD);
  3         7  
  3         222  
35              
36 5 50   5   35 if($AUTOLOAD =~ /::strptime\Z/o)
37             {
38 5         7 my $self = $_[0];
39 5   33     15 my $type = ref($self) || $self;
40 5         390 require Date::Parse;
41              
42 3     3   17 no strict 'refs';
  3         5  
  3         766  
43 5         24 *{"${type}::strptime"} = Date::Parse::gen_parser(
44 5         17 \%{"${type}::DoW"},
45 5         11 \%{"${type}::MoY"},
46 5         9 \@{"${type}::Dsuf"},
  5         19  
47             1);
48              
49 5         10 goto &{"${type}::strptime"};
  5         103  
50             }
51              
52 0         0 croak "Undefined method &$AUTOLOAD called";
53             }
54              
55             sub str2time
56             {
57 5     5 1 13 my $me = shift;
58 5         34 my @t = $me->strptime(@_);
59              
60             return undef
61 5 50       15 unless @t;
62              
63 5         16 my($ss,$mm,$hh,$day,$month,$year,$zone) = @t;
64 5         119 my @lt = localtime(time);
65              
66 5   100     22 $hh ||= 0;
67 5   100     14 $mm ||= 0;
68 5   100     10 $ss ||= 0;
69              
70 5 50       10 $month = $lt[4]
71             unless(defined $month);
72              
73 5 50       8 $day = $lt[3]
74             unless(defined $day);
75              
76 5 0       11 $year = ($month > $lt[4]) ? ($lt[5] - 1) : $lt[5]
    50          
77             unless(defined $year);
78              
79 5 50       24 return defined $zone ? timegm($ss,$mm,$hh,$day,$month,$year) - $zone
80             : timelocal($ss,$mm,$hh,$day,$month,$year);
81             }
82              
83             1;
84              
85             __END__