line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
7
|
|
|
7
|
|
40
|
use strict; |
|
7
|
|
|
|
|
10
|
|
|
7
|
|
|
|
|
173
|
|
2
|
7
|
|
|
7
|
|
33
|
use warnings; |
|
7
|
|
|
|
|
12
|
|
|
7
|
|
|
|
|
174
|
|
3
|
7
|
|
|
7
|
|
32
|
use MRO::Compat 'c3'; |
|
7
|
|
|
|
|
13
|
|
|
7
|
|
|
|
|
365
|
|
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
package WebService::Shippo::Currency; |
6
|
|
|
|
|
|
|
require WebService::Shippo::Request; |
7
|
|
|
|
|
|
|
require JSON::XS; |
8
|
7
|
|
|
7
|
|
30
|
use Carp ( 'confess' ); |
|
7
|
|
|
|
|
11
|
|
|
7
|
|
|
|
|
2047
|
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
{ |
11
|
|
|
|
|
|
|
my $content = q({ |
12
|
|
|
|
|
|
|
"AED": "United Arab Emirates Dirham", |
13
|
|
|
|
|
|
|
"AFN": "Afghan Afghani", |
14
|
|
|
|
|
|
|
"ALL": "Albanian Lek", |
15
|
|
|
|
|
|
|
"AMD": "Armenian Dram", |
16
|
|
|
|
|
|
|
"ANG": "Netherlands Antillean Guilder", |
17
|
|
|
|
|
|
|
"AOA": "Angolan Kwanza", |
18
|
|
|
|
|
|
|
"ARS": "Argentine Peso", |
19
|
|
|
|
|
|
|
"AUD": "Australian Dollar", |
20
|
|
|
|
|
|
|
"AWG": "Aruban Florin", |
21
|
|
|
|
|
|
|
"AZN": "Azerbaijani Manat", |
22
|
|
|
|
|
|
|
"BAM": "Bosnia-Herzegovina Convertible Mark", |
23
|
|
|
|
|
|
|
"BBD": "Barbadian Dollar", |
24
|
|
|
|
|
|
|
"BDT": "Bangladeshi Taka", |
25
|
|
|
|
|
|
|
"BGN": "Bulgarian Lev", |
26
|
|
|
|
|
|
|
"BHD": "Bahraini Dinar", |
27
|
|
|
|
|
|
|
"BIF": "Burundian Franc", |
28
|
|
|
|
|
|
|
"BMD": "Bermudan Dollar", |
29
|
|
|
|
|
|
|
"BND": "Brunei Dollar", |
30
|
|
|
|
|
|
|
"BOB": "Bolivian Boliviano", |
31
|
|
|
|
|
|
|
"BRL": "Brazilian Real", |
32
|
|
|
|
|
|
|
"BSD": "Bahamian Dollar", |
33
|
|
|
|
|
|
|
"BTC": "Bitcoin", |
34
|
|
|
|
|
|
|
"BTN": "Bhutanese Ngultrum", |
35
|
|
|
|
|
|
|
"BWP": "Botswanan Pula", |
36
|
|
|
|
|
|
|
"BYR": "Belarusian Ruble", |
37
|
|
|
|
|
|
|
"BZD": "Belize Dollar", |
38
|
|
|
|
|
|
|
"CAD": "Canadian Dollar", |
39
|
|
|
|
|
|
|
"CDF": "Congolese Franc", |
40
|
|
|
|
|
|
|
"CHF": "Swiss Franc", |
41
|
|
|
|
|
|
|
"CLF": "Chilean Unit of Account (UF)", |
42
|
|
|
|
|
|
|
"CLP": "Chilean Peso", |
43
|
|
|
|
|
|
|
"CNY": "Chinese Yuan", |
44
|
|
|
|
|
|
|
"COP": "Colombian Peso", |
45
|
|
|
|
|
|
|
"CRC": "Costa Rican Colón", |
46
|
|
|
|
|
|
|
"CUC": "Cuban Convertible Peso", |
47
|
|
|
|
|
|
|
"CUP": "Cuban Peso", |
48
|
|
|
|
|
|
|
"CVE": "Cape Verdean Escudo", |
49
|
|
|
|
|
|
|
"CZK": "Czech Republic Koruna", |
50
|
|
|
|
|
|
|
"DJF": "Djiboutian Franc", |
51
|
|
|
|
|
|
|
"DKK": "Danish Krone", |
52
|
|
|
|
|
|
|
"DOP": "Dominican Peso", |
53
|
|
|
|
|
|
|
"DZD": "Algerian Dinar", |
54
|
|
|
|
|
|
|
"EEK": "Estonian Kroon", |
55
|
|
|
|
|
|
|
"EGP": "Egyptian Pound", |
56
|
|
|
|
|
|
|
"ERN": "Eritrean Nakfa", |
57
|
|
|
|
|
|
|
"ETB": "Ethiopian Birr", |
58
|
|
|
|
|
|
|
"EUR": "Euro", |
59
|
|
|
|
|
|
|
"FJD": "Fijian Dollar", |
60
|
|
|
|
|
|
|
"FKP": "Falkland Islands Pound", |
61
|
|
|
|
|
|
|
"GBP": "British Pound Sterling", |
62
|
|
|
|
|
|
|
"GEL": "Georgian Lari", |
63
|
|
|
|
|
|
|
"GGP": "Guernsey Pound", |
64
|
|
|
|
|
|
|
"GHS": "Ghanaian Cedi", |
65
|
|
|
|
|
|
|
"GIP": "Gibraltar Pound", |
66
|
|
|
|
|
|
|
"GMD": "Gambian Dalasi", |
67
|
|
|
|
|
|
|
"GNF": "Guinean Franc", |
68
|
|
|
|
|
|
|
"GTQ": "Guatemalan Quetzal", |
69
|
|
|
|
|
|
|
"GYD": "Guyanaese Dollar", |
70
|
|
|
|
|
|
|
"HKD": "Hong Kong Dollar", |
71
|
|
|
|
|
|
|
"HNL": "Honduran Lempira", |
72
|
|
|
|
|
|
|
"HRK": "Croatian Kuna", |
73
|
|
|
|
|
|
|
"HTG": "Haitian Gourde", |
74
|
|
|
|
|
|
|
"HUF": "Hungarian Forint", |
75
|
|
|
|
|
|
|
"IDR": "Indonesian Rupiah", |
76
|
|
|
|
|
|
|
"ILS": "Israeli New Sheqel", |
77
|
|
|
|
|
|
|
"IMP": "Manx pound", |
78
|
|
|
|
|
|
|
"INR": "Indian Rupee", |
79
|
|
|
|
|
|
|
"IQD": "Iraqi Dinar", |
80
|
|
|
|
|
|
|
"IRR": "Iranian Rial", |
81
|
|
|
|
|
|
|
"ISK": "Icelandic Króna", |
82
|
|
|
|
|
|
|
"JEP": "Jersey Pound", |
83
|
|
|
|
|
|
|
"JMD": "Jamaican Dollar", |
84
|
|
|
|
|
|
|
"JOD": "Jordanian Dinar", |
85
|
|
|
|
|
|
|
"JPY": "Japanese Yen", |
86
|
|
|
|
|
|
|
"KES": "Kenyan Shilling", |
87
|
|
|
|
|
|
|
"KGS": "Kyrgystani Som", |
88
|
|
|
|
|
|
|
"KHR": "Cambodian Riel", |
89
|
|
|
|
|
|
|
"KMF": "Comorian Franc", |
90
|
|
|
|
|
|
|
"KPW": "North Korean Won", |
91
|
|
|
|
|
|
|
"KRW": "South Korean Won", |
92
|
|
|
|
|
|
|
"KWD": "Kuwaiti Dinar", |
93
|
|
|
|
|
|
|
"KYD": "Cayman Islands Dollar", |
94
|
|
|
|
|
|
|
"KZT": "Kazakhstani Tenge", |
95
|
|
|
|
|
|
|
"LAK": "Laotian Kip", |
96
|
|
|
|
|
|
|
"LBP": "Lebanese Pound", |
97
|
|
|
|
|
|
|
"LKR": "Sri Lankan Rupee", |
98
|
|
|
|
|
|
|
"LRD": "Liberian Dollar", |
99
|
|
|
|
|
|
|
"LSL": "Lesotho Loti", |
100
|
|
|
|
|
|
|
"LTL": "Lithuanian Litas", |
101
|
|
|
|
|
|
|
"LVL": "Latvian Lats", |
102
|
|
|
|
|
|
|
"LYD": "Libyan Dinar", |
103
|
|
|
|
|
|
|
"MAD": "Moroccan Dirham", |
104
|
|
|
|
|
|
|
"MDL": "Moldovan Leu", |
105
|
|
|
|
|
|
|
"MGA": "Malagasy Ariary", |
106
|
|
|
|
|
|
|
"MKD": "Macedonian Denar", |
107
|
|
|
|
|
|
|
"MMK": "Myanma Kyat", |
108
|
|
|
|
|
|
|
"MNT": "Mongolian Tugrik", |
109
|
|
|
|
|
|
|
"MOP": "Macanese Pataca", |
110
|
|
|
|
|
|
|
"MRO": "Mauritanian Ouguiya", |
111
|
|
|
|
|
|
|
"MTL": "Maltese Lira", |
112
|
|
|
|
|
|
|
"MUR": "Mauritian Rupee", |
113
|
|
|
|
|
|
|
"MVR": "Maldivian Rufiyaa", |
114
|
|
|
|
|
|
|
"MWK": "Malawian Kwacha", |
115
|
|
|
|
|
|
|
"MXN": "Mexican Peso", |
116
|
|
|
|
|
|
|
"MYR": "Malaysian Ringgit", |
117
|
|
|
|
|
|
|
"MZN": "Mozambican Metical", |
118
|
|
|
|
|
|
|
"NAD": "Namibian Dollar", |
119
|
|
|
|
|
|
|
"NGN": "Nigerian Naira", |
120
|
|
|
|
|
|
|
"NIO": "Nicaraguan Córdoba", |
121
|
|
|
|
|
|
|
"NOK": "Norwegian Krone", |
122
|
|
|
|
|
|
|
"NPR": "Nepalese Rupee", |
123
|
|
|
|
|
|
|
"NZD": "New Zealand Dollar", |
124
|
|
|
|
|
|
|
"OMR": "Omani Rial", |
125
|
|
|
|
|
|
|
"PAB": "Panamanian Balboa", |
126
|
|
|
|
|
|
|
"PEN": "Peruvian Nuevo Sol", |
127
|
|
|
|
|
|
|
"PGK": "Papua New Guinean Kina", |
128
|
|
|
|
|
|
|
"PHP": "Philippine Peso", |
129
|
|
|
|
|
|
|
"PKR": "Pakistani Rupee", |
130
|
|
|
|
|
|
|
"PLN": "Polish Zloty", |
131
|
|
|
|
|
|
|
"PYG": "Paraguayan Guarani", |
132
|
|
|
|
|
|
|
"QAR": "Qatari Rial", |
133
|
|
|
|
|
|
|
"RON": "Romanian Leu", |
134
|
|
|
|
|
|
|
"RSD": "Serbian Dinar", |
135
|
|
|
|
|
|
|
"RUB": "Russian Ruble", |
136
|
|
|
|
|
|
|
"RWF": "Rwandan Franc", |
137
|
|
|
|
|
|
|
"SAR": "Saudi Riyal", |
138
|
|
|
|
|
|
|
"SBD": "Solomon Islands Dollar", |
139
|
|
|
|
|
|
|
"SCR": "Seychellois Rupee", |
140
|
|
|
|
|
|
|
"SDG": "Sudanese Pound", |
141
|
|
|
|
|
|
|
"SEK": "Swedish Krona", |
142
|
|
|
|
|
|
|
"SGD": "Singapore Dollar", |
143
|
|
|
|
|
|
|
"SHP": "Saint Helena Pound", |
144
|
|
|
|
|
|
|
"SLL": "Sierra Leonean Leone", |
145
|
|
|
|
|
|
|
"SOS": "Somali Shilling", |
146
|
|
|
|
|
|
|
"SRD": "Surinamese Dollar", |
147
|
|
|
|
|
|
|
"STD": "São Tomé and Príncipe Dobra", |
148
|
|
|
|
|
|
|
"SVC": "Salvadoran Colón", |
149
|
|
|
|
|
|
|
"SYP": "Syrian Pound", |
150
|
|
|
|
|
|
|
"SZL": "Swazi Lilangeni", |
151
|
|
|
|
|
|
|
"THB": "Thai Baht", |
152
|
|
|
|
|
|
|
"TJS": "Tajikistani Somoni", |
153
|
|
|
|
|
|
|
"TMT": "Turkmenistani Manat", |
154
|
|
|
|
|
|
|
"TND": "Tunisian Dinar", |
155
|
|
|
|
|
|
|
"TOP": "Tongan Paʻanga", |
156
|
|
|
|
|
|
|
"TRY": "Turkish Lira", |
157
|
|
|
|
|
|
|
"TTD": "Trinidad and Tobago Dollar", |
158
|
|
|
|
|
|
|
"TWD": "New Taiwan Dollar", |
159
|
|
|
|
|
|
|
"TZS": "Tanzanian Shilling", |
160
|
|
|
|
|
|
|
"UAH": "Ukrainian Hryvnia", |
161
|
|
|
|
|
|
|
"UGX": "Ugandan Shilling", |
162
|
|
|
|
|
|
|
"USD": "United States Dollar", |
163
|
|
|
|
|
|
|
"UYU": "Uruguayan Peso", |
164
|
|
|
|
|
|
|
"UZS": "Uzbekistan Som", |
165
|
|
|
|
|
|
|
"VEF": "Venezuelan Bolívar Fuerte", |
166
|
|
|
|
|
|
|
"VND": "Vietnamese Dong", |
167
|
|
|
|
|
|
|
"VUV": "Vanuatu Vatu", |
168
|
|
|
|
|
|
|
"WST": "Samoan Tala", |
169
|
|
|
|
|
|
|
"XAF": "CFA Franc BEAC", |
170
|
|
|
|
|
|
|
"XAG": "Silver (troy ounce)", |
171
|
|
|
|
|
|
|
"XAU": "Gold (troy ounce)", |
172
|
|
|
|
|
|
|
"XCD": "East Caribbean Dollar", |
173
|
|
|
|
|
|
|
"XDR": "Special Drawing Rights", |
174
|
|
|
|
|
|
|
"XOF": "CFA Franc BCEAO", |
175
|
|
|
|
|
|
|
"XPD": "Palladium Ounce", |
176
|
|
|
|
|
|
|
"XPF": "CFP Franc", |
177
|
|
|
|
|
|
|
"XPT": "Platinum Ounce", |
178
|
|
|
|
|
|
|
"YER": "Yemeni Rial", |
179
|
|
|
|
|
|
|
"ZAR": "South African Rand", |
180
|
|
|
|
|
|
|
"ZMK": "Zambian Kwacha (pre-2013)", |
181
|
|
|
|
|
|
|
"ZMW": "Zambian Kwacha", |
182
|
|
|
|
|
|
|
"ZWL": "Zimbabwean Dollar" |
183
|
|
|
|
|
|
|
}); |
184
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
my $r = WebService::Shippo::Request->get( 'http://openexchangerates.org/api/currencies.json' ); |
186
|
|
|
|
|
|
|
my $json = JSON::XS->new->utf8->convert_blessed->allow_blessed; |
187
|
|
|
|
|
|
|
$content = $r->decoded_content if $r->is_success; |
188
|
|
|
|
|
|
|
my %codes = %{ $json->decode( $content ) }; |
189
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
sub validate_currency |
191
|
|
|
|
|
|
|
{ |
192
|
0
|
|
|
0
|
0
|
|
my ( $invocant, $currency_code ) = @_; |
193
|
0
|
|
|
|
|
|
my $k = uc( $currency_code ); |
194
|
|
|
|
|
|
|
confess "Invalid currency code ($currency_code)" |
195
|
0
|
0
|
|
|
|
|
unless exists( $codes{$k} ); |
196
|
0
|
0
|
|
|
|
|
return ( uc( $currency_code ), $codes{$k} ) |
197
|
|
|
|
|
|
|
if wantarray; |
198
|
0
|
|
|
|
|
|
return uc( $currency_code ); |
199
|
|
|
|
|
|
|
} |
200
|
|
|
|
|
|
|
} |
201
|
|
|
|
|
|
|
|
202
|
|
|
|
|
|
|
BEGIN { |
203
|
7
|
|
|
7
|
|
79
|
no warnings 'once'; |
|
7
|
|
|
|
|
24
|
|
|
7
|
|
|
|
|
280
|
|
204
|
7
|
|
|
7
|
|
183
|
*Shippo::Currency:: = *WebService::Shippo::Currency::; |
205
|
|
|
|
|
|
|
} |
206
|
|
|
|
|
|
|
|
207
|
|
|
|
|
|
|
1; |