-
Notifications
You must be signed in to change notification settings - Fork 2
/
ZodiacStone.pm
145 lines (100 loc) · 3.66 KB
/
ZodiacStone.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package Date::Birth::ZodiacStone;
use v5.10.0;
use strict;
use warnings;
use Exporter qw(import);
use String::Util qw(trim);
our $VERSION = '1.0';
our @EXPORT_OK = qw(zodiac_sign zodiac_stone);
my $zodiac;
while (my $line = <DATA>) {
chomp($line);
my ($sign, $start_month, $start_day, $end_month, $end_day, $stone) = split(/\|/, $line);
$sign = trim($sign);
$zodiac->{$sign}{name} = $sign;
$zodiac->{$sign}{start_month} = trim($start_month);
$zodiac->{$sign}{start_day} = $start_day;
$zodiac->{$sign}{end_month} = trim($end_month);
$zodiac->{$sign}{end_day} = $end_day;
$zodiac->{$sign}{stone} = $stone;
}
sub zodiac_sign {
my ($month, $day) = @_;
my $sign_name;
for my $base_sign (keys %$zodiac) {
my $sign = $zodiac->{$base_sign};
if (($month eq $sign->{start_month} && $day >= $sign->{start_day}) || ($month eq $sign->{end_month} && $day <= $sign->{end_day})) {
$sign_name = $sign->{name};
}
}
return $sign_name;
}
sub zodiac_stone {
my ($sign) = @_;
return $zodiac->{$sign}{stone};
}
=pod
=encoding utf8
=head1 NAME
B<Zodiac::Stone> returns the stone associated with zodiac signs.
=head1 VERSION
This document describes Date::Birth::ZodiacStone version 1.0.
=head1 SYNOPSIS
use Date::Birth::ZodiacStone qw(zodiac_stone zodiac_sign);
my $zodiac_sign = zodiac_sign('July', 3);
# Cancer
my $zodiac_stone = zodiac_stone('Cancer');
# emerald
=head1 DESCRIPTION
B<Date::Birth::ZodiacStone> returns the stone associated with zodiac signs when you use C<zodiac_stone>. C<zodiac_stone> needs to be imported into your script. It returns the stone associated with the sign entered.
If you do not know your zodiac sign, you can use C<zodiac_sign> to determine your sign using your birth month and day. C<sign> also needs to be imported into your script.
Date::Birth::ZodiacStone requires Perl version 5.10.0 or better to run.
=head2 The stones
Zodiac sign | Stone
------------|-----------
Capricorn | ruby
Aquarius | garnet
Pisces | amethyst
Aries | bloodstone
Taurus | sapphire
Gemini | agate
Cancer | emerald
Leo | onyx
Virgo | carnelian
Libra | chrysolite
Scorpio | beryl
Sagittarius | topaz
=head1 FUNCTIONS
Date::Birth::ZodiacStone has two functions that need to be imported into your script: C<zodiac_stone> and C<zodiac_sign>.
=head2 zodiac_stone
C<zodiac_stone> has one required parameter, the zodiac sign in English. You can see the list above for the names of the zodiac signs.
zodiac_stone($zodiac_sign);
=head2 zodiac_sign
C<zodiac_sign> has two required parameters, the month and day.
zodiac_sign($month, $day);
=head3 month
The month is the full month name in English.
=head3 day
The day is the day of the month.
=head1 DEPENDENCIES
Date::Birth::ZodiacStone depends on L<String::Util> and L<Exporter>.
=head1 AUTHOR
Lady Aleena
=head1 LICENSE AND COPYRIGHT
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>.
Copyright © 2020, Lady Aleena C<(aleena@cpan.org)>. All rights reserved.
=cut
1;
__DATA__
Capricorn |December |22|January |20|ruby
Aquarius |January |21|February |19|garnet
Pisces |February |20|March |20|amethyst
Aries |March |21|April |20|bloodstone
Taurus |April |21|May |21|sapphire
Gemini |May |22|June |21|agate
Cancer |June |22|July |22|emerald
Leo |July |23|August |22|onyx
Virgo |August |23|September|23|carnelian
Libra |September|24|October |23|chrysolite
Scorpio |October |24|November |22|beryl
Sagittarius|November |23|December |21|topaz