File Coverage

blib/lib/Telephony/CountryDialingCodes.pm
Criterion Covered Total %
statement 26 28 92.8
branch 5 6 83.3
condition 1 3 33.3
subroutine 6 6 100.0
pod 4 4 100.0
total 42 47 89.3


line stmt bran cond sub pod time code
1             package Telephony::CountryDialingCodes;
2             # $Id: CountryDialingCodes.pm,v 1.4 2009/11/02 19:46:32 cmanley Exp $
3             # See POD documentation below.
4 1     1   847 use strict;
  1         2  
  1         30  
5 1     1   6 use Carp;
  1         2  
  1         909  
6             our $VERSION = sprintf('%d.%02d', q|$Revision: 1.4 $| =~ m/ (\d+) \. (\d+) /xg);
7              
8              
9             # Private global 'constants'.
10             our %DIALING_ISO3166 = (
11             1 => [qw(AG AI AS BB BM BS CA DM DO GD GU JM LC KN KY MP MS PR TC TT US VC VG VI)],
12             20 => 'EG',
13             212 => [qw(MA EH)],
14             213 => 'DZ',
15             216 => 'TN',
16             218 => 'LY',
17             220 => 'GM',
18             221 => 'SN',
19             222 => 'MR',
20             223 => 'ML',
21             224 => 'GN',
22             225 => 'CI',
23             226 => 'BF',
24             227 => 'NE',
25             228 => 'TG',
26             229 => 'BJ',
27             230 => 'MU',
28             231 => 'LR',
29             232 => 'SL',
30             233 => 'GH',
31             234 => 'NG',
32             235 => 'TD',
33             236 => 'CF',
34             237 => 'CM',
35             238 => 'CV',
36             239 => 'ST',
37             240 => 'GQ',
38             241 => 'GA',
39             242 => 'CG',
40             243 => 'CD',
41             244 => 'AO',
42             245 => 'GW',
43             246 => 'IO',
44             247 => 'AC',
45             248 => 'SC',
46             249 => 'SD',
47             250 => 'RW',
48             251 => 'ET',
49             252 => 'SO',
50             253 => 'DJ',
51             254 => 'KE',
52             255 => 'TZ',
53             256 => 'UG',
54             257 => 'BI',
55             258 => 'MZ',
56             260 => 'ZM',
57             261 => 'MG',
58             262 => 'RE',
59             263 => 'ZW',
60             264 => 'NA',
61             265 => 'MW',
62             266 => 'LS',
63             267 => 'BW',
64             268 => 'SZ',
65             269 => [qw(KM YT)],
66             27 => 'ZA',
67             290 => 'SH',
68             291 => 'ER',
69             297 => 'AW',
70             298 => 'FO',
71             299 => 'GL',
72             30 => 'GR',
73             31 => 'NL',
74             32 => 'BE',
75             33 => 'FR',
76             34 => 'ES',
77             350 => 'GI',
78             351 => 'PT',
79             352 => 'LU',
80             353 => 'IE',
81             354 => 'IS',
82             355 => 'AL',
83             356 => 'MT',
84             357 => 'CY',
85             358 => 'FI',
86             359 => 'BG',
87             36 => 'HU',
88             370 => 'LT',
89             371 => 'LV',
90             372 => 'EE',
91             373 => 'MD',
92             374 => 'AM',
93             375 => 'BY',
94             376 => 'AD',
95             377 => 'MC',
96             378 => 'SM',
97             379 => 'VA',
98             380 => 'UA',
99             381 => 'RS',
100             382 => 'ME',
101             385 => 'HR',
102             386 => 'SI',
103             387 => 'BA',
104             388 => 'EU',
105             389 => 'MK',
106             39 => 'IT',
107             40 => 'RO',
108             41 => 'CH',
109             420 => 'CZ',
110             421 => 'SK',
111             423 => 'LI',
112             43 => 'AT',
113             44 => 'GB',
114             45 => 'DK',
115             46 => 'SE',
116             47 => 'NO',
117             48 => 'PL',
118             49 => 'DE',
119             500 => 'FK',
120             501 => 'BZ',
121             502 => 'GT',
122             503 => 'SV',
123             504 => 'HN',
124             505 => 'NI',
125             506 => 'CR',
126             507 => 'PA',
127             508 => 'PM',
128             509 => 'HT',
129             51 => 'PE',
130             52 => 'MX',
131             53 => 'CU',
132             54 => 'AR',
133             55 => 'BR',
134             56 => 'CL',
135             57 => 'CO',
136             58 => 'VE',
137             590 => 'GP',
138             591 => 'BO',
139             592 => 'GY',
140             593 => 'EC',
141             594 => 'GF',
142             595 => 'PY',
143             596 => 'MQ',
144             597 => 'SR',
145             598 => 'UY',
146             599 => 'AN',
147             60 => 'MY',
148             61 => [qw(AU CC CX)],
149             62 => 'ID',
150             63 => 'PH',
151             64 => 'NZ',
152             65 => 'SG',
153             66 => 'TH',
154             670 => 'TL',
155             672 => [qw(AQ NF)],
156             673 => 'BN',
157             674 => 'NR',
158             675 => 'PG',
159             676 => 'TO',
160             677 => 'SB',
161             678 => 'VU',
162             679 => 'FJ',
163             680 => 'PW',
164             681 => 'WF',
165             682 => 'CK',
166             683 => 'NU',
167             685 => 'WS',
168             686 => 'KI',
169             687 => 'NC',
170             688 => 'TV',
171             689 => 'PF',
172             690 => 'TK',
173             691 => 'FM',
174             692 => 'MH',
175             7 => [qw(RU KZ)],
176             800 => 'XT',
177             808 => 'XS',
178             81 => 'JP',
179             82 => 'KR',
180             84 => 'VN',
181             850 => 'KP',
182             852 => 'HK',
183             853 => 'MO',
184             855 => 'KH',
185             856 => 'LA',
186             86 => 'CN',
187             870 => 'XN',
188             871 => 'XE',
189             872 => 'XF',
190             873 => 'XI',
191             874 => 'XW',
192             878 => 'XP',
193             880 => 'BD',
194             881 => 'XG',
195             882 => 'XV',
196             886 => 'TW',
197             90 => 'TR',
198             91 => 'IN',
199             92 => 'PK',
200             93 => 'AF',
201             94 => 'LK',
202             95 => 'MM',
203             960 => 'MV',
204             961 => 'LB',
205             962 => 'JO',
206             963 => 'SY',
207             964 => 'IQ',
208             965 => 'KW',
209             966 => 'SA',
210             967 => 'YE',
211             968 => 'OM',
212             970 => 'PS',
213             971 => 'AE',
214             972 => 'IL',
215             973 => 'BH',
216             974 => 'QA',
217             975 => 'BT',
218             976 => 'MN',
219             977 => 'NP',
220             979 => 'XR',
221             98 => 'IR',
222             991 => 'XC',
223             992 => 'TJ',
224             993 => 'TM',
225             994 => 'AZ',
226             995 => 'GE',
227             996 => 'KG',
228             998 => 'UZ',
229             );
230             our %ISO3166_DIALING = map { my $dc = $_; my $x = $DIALING_ISO3166{$_}; map { $_ => $dc } (ref($x) ? @{$x} : $x); } keys(%DIALING_ISO3166);
231              
232              
233             sub new {
234 1     1 1 400 my $proto = shift;
235 1   33     8 my $class = ref($proto) || $proto;
236 1         3 my $self = {};
237 1         3 bless($self,$class);
238 1         3 return $self;
239             }
240              
241              
242              
243             sub country_codes {
244 2     2 1 4 my $proto = shift;
245 2         4 my $dc = shift;
246 2         4 my $cc = $DIALING_ISO3166{$dc};
247 2 50       6 if (defined($cc)) {
248 2 100       15 return ref($cc) ? @{$cc} : ($cc);
  1         14  
249             }
250 0         0 return ();
251             }
252              
253              
254              
255             sub dialing_code {
256 2     2 1 552 my $proto = shift;
257 2         5 my $cc = uc(shift);
258 2         12 return $ISO3166_DIALING{$cc};
259             }
260              
261              
262              
263             sub extract_dialing_code {
264 1     1 1 271 my $proto = shift;
265 1         3 my $phn = shift;
266             # Chop off leading + or 0's if any.
267 1         4 $phn =~ s/^[+0]+//;
268 1         27 foreach my $dialcode (keys %DIALING_ISO3166) {
269 140 100       307 if (substr($phn,0,length($dialcode)) eq $dialcode) {
270 1         5 return $dialcode;
271             }
272             }
273 0           return undef;
274             }
275              
276              
277             1;
278              
279             __END__