line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Astro::Units; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
121858
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
22
|
|
4
|
1
|
|
|
1
|
|
4
|
use warnings; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
20
|
|
5
|
|
|
|
|
|
|
|
6
|
1
|
|
|
1
|
|
4
|
use Carp; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
48
|
|
7
|
|
|
|
|
|
|
|
8
|
1
|
|
|
1
|
|
5
|
use bignum; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
6
|
|
9
|
1
|
|
|
1
|
|
1116
|
use Math::BigFloat; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
4
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
Math::BigFloat->config({ |
12
|
|
|
|
|
|
|
div_scale => 0, |
13
|
|
|
|
|
|
|
accuracy => undef, |
14
|
|
|
|
|
|
|
}); |
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
our $VERSION = '1.10'; |
17
|
|
|
|
|
|
|
use constant { |
18
|
1
|
|
|
|
|
6
|
ONE_LIGHT_YEAR => Math::BigFloat->new('9_460_730_472_580.8'), |
19
|
|
|
|
|
|
|
ONE_LIGHT_WEEK => Math::BigFloat->new('181_314_478_598.399_9'), |
20
|
|
|
|
|
|
|
ONE_LIGHT_DAY => Math::BigFloat->new('25_902_068_371.199_997'), |
21
|
|
|
|
|
|
|
ONE_LIGHT_HOUR => Math::BigFloat->new('1_079_252_848.8'), |
22
|
|
|
|
|
|
|
ONE_LIGHT_MINUTE => Math::BigFloat->new('17_987_547.48'), |
23
|
|
|
|
|
|
|
ONE_LIGHT_SECOND => Math::BigFloat->new('299_792.458'), |
24
|
|
|
|
|
|
|
ONE_AU => Math::BigFloat->new('149_597_870.7'), |
25
|
|
|
|
|
|
|
ONE_PARSEC => Math::BigFloat->new('30_856_775_814_914.218_05'), |
26
|
|
|
|
|
|
|
ONE_MILE => Math::BigFloat->new('1.609_344'), |
27
|
1
|
|
|
1
|
|
660
|
}; |
|
1
|
|
|
|
|
1
|
|
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub new { |
30
|
2
|
|
|
2
|
1
|
68
|
my $class = shift; |
31
|
2
|
|
|
|
|
6
|
my %args = @_; |
32
|
2
|
|
|
|
|
2
|
my $self = {}; |
33
|
2
|
100
|
66
|
|
|
11
|
if (exists $args{unit} && defined $args{unit}) { |
34
|
1
|
|
|
|
|
38
|
my $u = lc (substr($args{unit},0,1) ); |
35
|
1
|
50
|
|
|
|
97
|
croak("Invalid unit use Either (Miles or Kilometers) or (mi or km) Default is Kilometers\n") |
36
|
|
|
|
|
|
|
unless ( $u =~ /^(m|k)/i); |
37
|
1
|
|
|
|
|
3
|
$self->{unit} = $u; |
38
|
|
|
|
|
|
|
} else { |
39
|
1
|
|
|
|
|
3
|
$self->{unit} = 'k'; |
40
|
|
|
|
|
|
|
} |
41
|
2
|
|
|
|
|
6
|
return bless($self, $class); |
42
|
|
|
|
|
|
|
} |
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
sub _clean { |
45
|
66
|
|
|
66
|
|
81
|
my $raw_string = shift; |
46
|
66
|
|
|
|
|
357
|
$raw_string =~ s/([a-zA-Z\s_,\s])//g; |
47
|
66
|
|
|
|
|
1033
|
return $raw_string; |
48
|
|
|
|
|
|
|
} |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
#atrological units to km/mi |
51
|
6
|
|
|
6
|
1
|
5357
|
sub get_astronomical_units { return _calculate(@_, ONE_AU) } |
52
|
|
|
|
|
|
|
|
53
|
4
|
|
|
4
|
1
|
5412
|
sub get_light_years { return _calculate( @_, ONE_LIGHT_YEAR) } |
54
|
|
|
|
|
|
|
|
55
|
2
|
|
|
2
|
1
|
1144
|
sub get_light_week { return _calculate( @_, ONE_LIGHT_WEEK) } |
56
|
|
|
|
|
|
|
|
57
|
2
|
|
|
2
|
1
|
1077
|
sub get_light_days { return _calculate( @_, ONE_LIGHT_DAY) } |
58
|
|
|
|
|
|
|
|
59
|
2
|
|
|
2
|
1
|
1077
|
sub get_light_hours { return _calculate( @_, ONE_LIGHT_HOUR) } |
60
|
|
|
|
|
|
|
|
61
|
2
|
|
|
2
|
1
|
1090
|
sub get_light_minutes { return _calculate( @_, ONE_LIGHT_MINUTE)} |
62
|
|
|
|
|
|
|
|
63
|
2
|
|
|
2
|
1
|
1123
|
sub get_light_seconds { return _calculate( @_, ONE_LIGHT_SECOND) } |
64
|
|
|
|
|
|
|
|
65
|
2
|
|
|
2
|
1
|
1040
|
sub get_light_parsecs { return _calculate( @_, ONE_PARSEC) } |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
#reverse function km/mi to astro |
68
|
2
|
|
|
2
|
1
|
1132
|
sub convert_to_astronomical_units { return _reverse_calculate(@_, ONE_AU) } |
69
|
|
|
|
|
|
|
|
70
|
2
|
|
|
2
|
1
|
571
|
sub convert_to_light_years { return _reverse_calculate( @_, ONE_LIGHT_YEAR) } |
71
|
|
|
|
|
|
|
|
72
|
2
|
|
|
2
|
1
|
547
|
sub convert_to_light_weeks { return _reverse_calculate( @_, ONE_LIGHT_WEEK) } |
73
|
|
|
|
|
|
|
|
74
|
2
|
|
|
2
|
1
|
537
|
sub convert_to_light_days { return _reverse_calculate( @_, ONE_LIGHT_DAY) } |
75
|
|
|
|
|
|
|
|
76
|
2
|
|
|
2
|
1
|
544
|
sub convert_to_light_hours { return _reverse_calculate( @_, ONE_LIGHT_HOUR) } |
77
|
|
|
|
|
|
|
|
78
|
2
|
|
|
2
|
1
|
551
|
sub convert_to_light_minutes { return _reverse_calculate( @_, ONE_LIGHT_MINUTE)} |
79
|
|
|
|
|
|
|
|
80
|
2
|
|
|
2
|
1
|
573
|
sub convert_to_light_seconds { return _reverse_calculate( @_, ONE_LIGHT_SECOND) } |
81
|
|
|
|
|
|
|
|
82
|
2
|
|
|
2
|
1
|
502
|
sub convert_to_light_parsec { return _reverse_calculate( @_, ONE_PARSEC) } |
83
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
#Asu to light units miles/kilometers not applicable |
85
|
|
|
|
|
|
|
|
86
|
2
|
|
|
2
|
1
|
598
|
sub au_to_light_years { return _au_to_light(@_, ONE_LIGHT_YEAR) } |
87
|
|
|
|
|
|
|
|
88
|
2
|
|
|
2
|
1
|
563
|
sub au_to_light_weeks { return _au_to_light( @_, ONE_LIGHT_WEEK) } |
89
|
|
|
|
|
|
|
|
90
|
2
|
|
|
2
|
1
|
561
|
sub au_to_light_days { return _au_to_light( @_, ONE_LIGHT_DAY) } |
91
|
|
|
|
|
|
|
|
92
|
2
|
|
|
2
|
1
|
633
|
sub au_to_light_hours { return _au_to_light( @_, ONE_LIGHT_HOUR) } |
93
|
|
|
|
|
|
|
|
94
|
2
|
|
|
2
|
1
|
571
|
sub au_to_light_minutes { return _au_to_light( @_, ONE_LIGHT_MINUTE) } |
95
|
|
|
|
|
|
|
|
96
|
2
|
|
|
2
|
1
|
552
|
sub au_to_light_seconds { return _au_to_light( @_, ONE_LIGHT_SECOND)} |
97
|
|
|
|
|
|
|
|
98
|
2
|
|
|
2
|
1
|
550
|
sub au_to_light_parsecs { return _au_to_light( @_, ONE_PARSEC) } |
99
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
#light units to astronomical units miles/kilometers not applicable |
101
|
|
|
|
|
|
|
|
102
|
2
|
|
|
2
|
1
|
561
|
sub light_years_to_au { return _light_to_au(@_, ONE_LIGHT_YEAR) } |
103
|
|
|
|
|
|
|
|
104
|
2
|
|
|
2
|
1
|
554
|
sub light_weeks_to_au { return _light_to_au( @_, ONE_LIGHT_WEEK) } |
105
|
|
|
|
|
|
|
|
106
|
2
|
|
|
2
|
1
|
565
|
sub light_days_to_au { return _light_to_au( @_, ONE_LIGHT_DAY) } |
107
|
|
|
|
|
|
|
|
108
|
2
|
|
|
2
|
1
|
554
|
sub light_hours_to_au { return _light_to_au( @_, ONE_LIGHT_HOUR) } |
109
|
|
|
|
|
|
|
|
110
|
2
|
|
|
2
|
1
|
605
|
sub light_minutes_to_au { return _light_to_au( @_, ONE_LIGHT_MINUTE) } |
111
|
|
|
|
|
|
|
|
112
|
2
|
|
|
2
|
1
|
544
|
sub light_seconds_to_au { return _light_to_au( @_, ONE_LIGHT_SECOND)} |
113
|
|
|
|
|
|
|
|
114
|
2
|
|
|
2
|
1
|
875
|
sub light_parsecs_to_au { return _light_to_au( @_, ONE_PARSEC) } |
115
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
sub _calculate { |
117
|
22
|
|
|
22
|
|
41
|
my ($self,$raw_inp,$multiplier) = @_; |
118
|
22
|
|
|
|
|
31
|
my $inp = Math::BigFloat->new(_clean($raw_inp)); |
119
|
22
|
|
|
|
|
3368
|
my $res = $inp->bmul($multiplier); |
120
|
22
|
100
|
|
|
|
9722
|
return $self->{unit} eq 'm' ? $res->bdiv(ONE_MILE) : $res; |
121
|
|
|
|
|
|
|
} |
122
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
sub _reverse_calculate { |
124
|
16
|
|
|
16
|
|
46
|
my ($self,$raw_inp,$divisor) = @_; |
125
|
16
|
|
|
|
|
25
|
my $inp = Math::BigFloat->new(_clean($raw_inp)); |
126
|
16
|
100
|
|
|
|
1766
|
$inp = $inp->bmul(ONE_MILE) if ($self->{unit} eq 'm'); |
127
|
16
|
|
|
|
|
1455
|
my $res = $inp->bdiv($divisor); |
128
|
16
|
|
|
|
|
9870
|
return $res; |
129
|
|
|
|
|
|
|
} |
130
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
sub _au_to_light { |
132
|
14
|
|
|
14
|
|
23
|
my ($self,$raw_inp,$divisor) = @_; |
133
|
14
|
|
|
|
|
26
|
my $inp = Math::BigFloat->new(_clean($raw_inp)); |
134
|
14
|
|
|
|
|
919
|
my $au_km = $inp->bmul(ONE_AU); |
135
|
14
|
|
|
|
|
1774
|
my $res = $au_km->bdiv($divisor); |
136
|
14
|
|
|
|
|
8247
|
return $res; |
137
|
|
|
|
|
|
|
} |
138
|
|
|
|
|
|
|
|
139
|
|
|
|
|
|
|
sub _light_to_au { |
140
|
14
|
|
|
14
|
|
24
|
my ($self,$raw_inp,$multiplier) = @_; |
141
|
14
|
|
|
|
|
23
|
my $inp = Math::BigFloat->new(_clean($raw_inp)); |
142
|
14
|
|
|
|
|
895
|
my $lu_km = $inp->bmul($multiplier); |
143
|
14
|
|
|
|
|
1693
|
my $res = $lu_km->bdiv(ONE_AU); |
144
|
14
|
|
|
|
|
8208
|
return $res; |
145
|
|
|
|
|
|
|
} |
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
1; |
148
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
__END__ |