| line | % | coverage | branch |
| 133 | 100 | T | F | if (not defined $class) { } |
| 100 | T | F | elsif (ref $class) { } |
| 134 | 50 | T | F | if ($params) |
| 135 | 50 | T | F | if (my $logger = $params->{'logger'}) |
| 143 | 50 | T | F | if defined $params->{'supported'} |
| 150 | 100 | T | F | if (defined $params->{'logger'} and &blessed($params->{'logger'})) |
| 151 | 100 | T | F | unless ($params->{'logger'}->can("warn") and $params->{'logger'}->can("info") and $params->{'logger'}->can("error")) |
| 164 | 100 | T | F | if (defined $params->{'supported'}) { } |
| 166 | 100 | T | F | if (ref $params->{'supported'}) { } |
| 100 | T | F | elsif (length $params->{'supported'} < 2 or length $params->{'supported'} > 5) { } |
| 167 | 100 | T | F | if (ref $params->{'supported'} ne "ARRAY") |
| 174 | 50 | T | F | if (my $logger = $params->{'logger'}) |
| 184 | 100 | T | F | if ($cache and $ENV{'REMOTE_ADDR'}) |
| 186 | 100 | T | F | if (my $rc = $cache->get($key)) |
| 199 | 50 | T | F | if ($rc->{'_what_language'} || $rc->{'_rlanguage'} and $info and $info->lang) |
| 216 | 100 | T | F | ref $params->{'supported'} ? : |
| 237 | 100 | T | F | if ($info and $l = $info->lang) { } |
| 100 | T | F | elsif ($l = $class->_what_language) { } |
| 248 | 100 | T | F | if (ref $params->{'supported'} eq 'ARRAY') { } |
| 259 | 50 | T | F | if (defined $^V and $^V ge "v5.14.0") |
| 260 | 50 | T | F | if ${^GLOBAL_PHASE} eq "DESTRUCT" |
| 262 | 100 | T | F | unless $ENV{'REMOTE_ADDR'} |
| 265 | 50 | T | F | unless ref $self |
| 268 | 100 | T | F | unless $cache |
| 276 | 100 | T | F | if $cache->get($key) |
| 318 | 100 | T | F | unless $self->{'_slanguage'} |
| 361 | 100 | T | F | unless $self->{'_slanguage'} |
| 385 | 100 | T | F | unless $self->{'_slanguage'} |
| 416 | 100 | T | F | unless $self->{'_slanguage'} |
| 438 | 100 | T | F | unless $self->{'_rlanguage'} |
| 459 | 100 | T | F | if (defined $http_accept_language) |
| 467 | 100 | T | F | if ($http_accept_language eq $DEPRECATED_EN_UK) |
| 477 | 100 | T | F | if ($l) { } |
| 100 | T | F | elsif ($http_accept_language =~ /;/) { } |
| 478 | 100 | T | F | if $self->_resolve_match($l, $requested_sublanguage, $http_accept_language) |
| 490 | 50 | T | F | if ($self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown") |
| 491 | 0 | T | F | if ($self->{'_rlanguage'} eq "Unknown") |
| 494 | 0 | T | F | if ($self->{'_rlanguage'}) |
| 495 | 0 | T | F | if (my $resolved = $self->_code2language($self->{'_rlanguage'})) |
| 503 | 100 | T | F | if (!$self->{'_rlanguage'} || $self->{'_rlanguage'} eq 'Unknown' and length $http_accept_language == 2 || $http_accept_language =~ /^..-..$/) |
| 512 | 100 | T | F | if $self->{'_dont_use_ip'} |
| 530 | 50 | T | F | unless $_[0] =~ /^Use of uninitialized value/ |
| 538 | 100 | T | F | if ($l and $http_accept_language =~ /-/ and not $http_accept_language =~ qr/$l/i) |
| 544 | 100 | T | F | unless ($l) |
| 550 | 100 | T | F | unless ($l) |
| 553 | 100 | T | F | if $l |
| 573 | 100 | T | F | if ($token =~ s/;\s*q\s*=\s*(\d+(?:\.\d+)?)//) |
| 577 | 50 | T | F | if length $token |
| 596 | 100 | T | F | unless $tag =~ /^(..)-(..)$/ |
| 599 | 100 | T | F | if ($i18n->accepts($base, $self->{'_supported'})) |
| 621 | 100 | T | F | if $tag =~ /^..-../ |
| 623 | 100 | T | F | if ($i18n->accepts($tag, $self->{'_supported'})) |
| 644 | 100 | T | F | if (not $l =~ /^..-../) { } |
| 50 | T | F | elsif ($l =~ /(.+)-(..)$/) { } |
| 666 | 100 | T | F | unless $self->{'_slanguage'} |
| 674 | 100 | T | F | if ($header =~ /..-(..)$/) { } |
| 100 | T | F | elsif ($header =~ /..-([a-z]{2,3})$/i) { } |
| 680 | 50 | T | F | if $@ |
| 683 | 100 | T | F | if ($sl) { } |
| 100 | T | F | elsif ($requested_sublanguage) { } |
| 686 | 100 | T | F | if (my $c = $self->_code2countryname($requested_sublanguage)) { } |
| 711 | 50 | T | F | if ($accepts) |
| 714 | 50 | T | F | if ($accepts =~ /\-/) { } |
| 719 | 0 | T | F | if ($self->{'_cache'}) |
| 723 | 0 | T | F | if ($from_cache) { } |
| 730 | 0 | T | F | if ($slanguage) |
| 734 | 0 | T | F | if ($variety eq "uk") |
| 739 | 0 | T | F | if (defined(my $c = $self->_code2countryname($variety))) |
| 746 | 0 | T | F | if ($self->{'_sublanguage'}) |
| 751 | 0 | T | F | unless ($from_cache) |
| 757 | 0 | T | F | if $self->{'_cache'} |
| 769 | 50 | T | F | unless $accepts |
| 776 | 50 | T | F | if ($variety =~ /[a-z]{2,3}/ and not defined $self->{'_sublanguage'}) |
| 780 | 50 | T | F | if ($variety eq "uk") |
| 786 | 100 | T | F | if ($self->{'_cache'}) |
| 790 | 100 | T | F | if (defined $from_cache) { } |
| 803 | 100 | T | F | if (defined $results[0]) { } |
| 810 | 100 | T | F | if ($@ or not defined $language_name) { } |
| 811 | 50 | T | F | if $@ |
| 818 | 100 | T | F | if ($self->{'_cache'} and not defined $from_cache) |
| 833 | 50 | T | F | if (defined $self->{'_sublanguage'}) |
| 855 | 100 | T | F | if (not defined $country and my $c = $self->_what_language) |
| 856 | 100 | T | F | if ($c =~ /^(..)_(..)/) { } |
| 100 | T | F | elsif ($c =~ /^(..)$/) { } |
| 862 | 100 | T | F | unless defined $country |
| 867 | 100 | T | F | if ($self->{'_cache'}) |
| 871 | 100 | T | F | if ($from_cache) { } |
| 876 | 100 | T | F | if ($l) |
| 878 | 50 | T | F | if (defined $l) |
| 881 | 50 | T | F | if $language_name |
| 887 | 100 | T | F | unless $language_name |
| 889 | 100 | T | F | if (not defined $self->{'_rlanguage'} or $self->{'_rlanguage'} eq "Unknown") |
| 893 | 50 | T | F | unless (exists $self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown") |
| 896 | 100 | T | F | if ($language_name and $language_code2 and not defined $http_accept_language) { } |
| 904 | 50 | T | F | unless ($code) |
| 905 | 0 | T | F | if ($http_accept_language and $http_accept_language ne $self->{'_rlanguage'}) |
| 909 | 0 | T | F | unless ($code) |
| 911 | 0 | T | F | if ($self->{'_rlanguage'} =~ /(.+)\s\(.+/) |
| 912 | 0 | T | F | if (not defined $http_accept_language or $1 ne $self->{'_rlanguage'}) |
| 917 | 0 | T | F | unless ($code) |
| 926 | 50 | T | F | if ($code) |
| 928 | 50 | T | F | if ($self->{'_slanguage'}) { } |
| 938 | 100 | T | F | if (not defined $self->{'_slanguage_code_alpha2'}) { } |
| 100 | T | F | elsif (not defined $from_cache and $self->{'_cache'} and defined $self->{'_slanguage_code_alpha2'}) { } |
| 961 | 100 | T | F | /^(.+)-/ ? : |
| 963 | 100 | T | F | if (exists $base_languages{$language_string}) |
| 980 | 100 | T | F | if (ref $self) |
| 982 | 100 | T | F | if ($self->{'_what_language'}) |
| 986 | 100 | T | F | if (my $info = $self->{'_info'}) |
| 987 | 50 | T | F | if (my $rc = $info->lang) |
| 994 | 100 | T | F | if (my $raw_lang = $ENV{'HTTP_ACCEPT_LANGUAGE'}) |
| 996 | 100 | T | F | if ($raw_lang =~ /^([A-Za-z0-9\-,;=.*\s]{1,$ACCEPT_LANG_MAX})$/a) { } |
| 50 | T | F | elsif (ref $self) { } |
| 998 | 100 | T | F | if (ref $self) |
| 1007 | 100 | T | F | if (defined $ENV{'LANG'}) |
| 1013 | 100 | T | F | if ($ENV{'LANG'} =~ /^([A-Za-z0-9_.\-]{1,$ACCEPT_LANG_MAX})$/a) { } |
| 50 | T | F | elsif (ref $self) { } |
| 1015 | 50 | T | F | if (ref $self) |
| 1059 | 100 | T | F | if ($self->{'_country'}) |
| 1065 | 100 | T | F | if (defined $ENV{'GEOIP_COUNTRY_CODE'}) |
| 1066 | 100 | T | F | if ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a) { } |
| 1075 | 100 | T | F | if ($ENV{'HTTP_CF_IPCOUNTRY'} and $ENV{'HTTP_CF_IPCOUNTRY'} ne "XX") |
| 1076 | 100 | T | F | if ($ENV{'HTTP_CF_IPCOUNTRY'} =~ /^([A-Z]{2})$/a) { } |
| 1085 | 100 | T | F | unless defined $raw_ip |
| 1089 | 100 | T | F | if ($raw_ip =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/a) { } |
| 100 | T | F | elsif ($raw_ip =~ /^([0-9a-fA-F:]{2,39}|[0-9a-fA-F:]{2,30}:(?:\d{1,3}\.){3}\d{1,3})$/a) { } |
| 1101 | 100 | T | F | unless (is_ipv4($ip)) |
| 1103 | 100 | T | F | if ($ip eq '::1') { } |
| 50 | T | F | elsif ($ip =~ /^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i) { } |
| 50 | T | F | elsif (not is_ipv6($ip)) { } |
| 1112 | 100 | T | F | if (is_private_ip($ip)) |
| 1116 | 100 | T | F | if (is_loopback_ip($ip)) |
| 1122 | 100 | T | F | if ($self->{'_cache'}) |
| 1124 | 100 | T | F | if (defined $self->{'_country'}) |
| 1125 | 100 | T | F | if (not $self->{'_country'} =~ /\D/) { } |
| 1138 | 100 | T | F | if ($self->{'_have_ipcountry'} == $GEO_UNKNOWN) |
| 1139 | 50 | T | F | if (eval {
do {
require IP::Country
}
}) { } |
| 1149 | 100 | T | F | if ($self->{'_have_ipcountry'}) |
| 1151 | 100 | T | F | if ($self->{'_country'}) { } |
| 50 | T | F | elsif (is_ipv4($ip)) { } |
| 1159 | 100 | T | F | unless (defined $self->{'_country'}) |
| 1160 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_UNKNOWN) |
| 1163 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_PRESENT) |
| 1168 | 100 | T | F | if (not defined $self->{'_country'} and $ip ne $BROKEN_GEOIPFREE) |
| 1169 | 50 | T | F | if ($self->{'_have_geoipfree'} == $GEO_UNKNOWN) |
| 1171 | 0 | T | F | if ($@) { } |
| 1179 | 100 | T | F | if ($self->{'_have_geoipfree'} == $GEO_PRESENT) |
| 1180 | 50 | T | F | if (my $country = ($self->{'_geoipfree'}->LookUp($ip))[0]) |
| 1188 | 100 | T | F | if ($self->{'_country'} and $self->{'_country'} eq "eu") |
| 1193 | 50 | T | F | if (not $self->{'_country'} and eval {
do {
require LWP::Simple::WithCache;
require JSON::Parse
}
}) |
| 1199 | 0 | T | F | if (my $data = LWP::Simple::WithCache::get("http://www.geoplugin.net/json.gp?ip=$ip")) |
| 1201 | 0 | T | F | if $@ |
| 1206 | 100 | T | F | unless ($self->{'_country'}) |
| 1211 | 100 | T | F | if ($self->{'_country'}) |
| 1212 | 100 | T | F | if (not $self->{'_country'} =~ /\D/) { } |
| 1219 | 100 | T | F | if ($self->{'_country'} eq 'hk') { } |
| 100 | T | F | elsif ($self->{'_country'} eq 'eu') { } |
| 1225 | 50 | T | F | if ($self->{'_country'} and not $self->{'_country'} =~ /\D/) { } |
| 100 | T | F | elsif ($self->{'_country'} and $self->{'_cache'}) { } |
| 1263 | 100 | T | F | unless ($@ or not defined $whois or ref $whois ne "HASH") |
| 1264 | 100 | T | F | if (defined $whois->{'Country'}) { } |
| 50 | T | F | elsif (defined $whois->{'country'}) { } |
| 1269 | 50 | T | F | if ($self->{'_country'}) |
| 1270 | 100 | T | F | if ($self->{'_country'} eq 'EU') { } |
| 100 | T | F | elsif ($self->{'_country'} eq 'US' and defined $whois->{'StateProv'} and $whois->{'StateProv'} eq 'PR') { } |
| 1279 | 100 | T | F | if ($self->{'_country'}) |
| 1283 | 100 | T | F | if ($self->{'_country'} =~ /^(..)\s*#/) |
| 1296 | 50 | T | F | unless ($@) |
| 1301 | 100 | T | F | if ($self->{'_country'}) |
| 1303 | 100 | T | F | if ($self->{'_country'} =~ /^(..)\s*#/) |
| 1323 | 100 | T | F | if (subnet_matcher($BAIDU_SUBNET)->($ip)) { } |
| 1349 | 50 | T | F | unless ($db_present) |
| 1355 | 0 | T | F | if ($@) |
| 1364 | 0 | T | F | if (-r '/usr/share/GeoIP/GeoIP.dat') { } |
| 1391 | 100 | T | F | if $self->{'_locale'} |
| 1396 | 100 | T | F | if (defined $agent and $agent =~ /\((.+)\)/) |
| 1401 | 100 | T | F | if ($candidate =~ /^[a-zA-Z]{2}-([a-zA-Z]{2})$/) |
| 1403 | 50 | T | F | if (my $c = $self->_code2country($1)) |
| 1411 | 50 | T | F | if (eval {
do {
require HTTP::BrowserDetect
}
}) |
| 1414 | 100 | T | F | if ($browser and $browser->country and my $c = $self->_code2country($browser->country)) |
| 1423 | 100 | T | F | if ($country) |
| 1430 | 50 | T | F | unless ($@) |
| 1431 | 50 | T | F | if ($c) |
| 1440 | 100 | T | F | if (defined $ENV{'GEOIP_COUNTRY_CODE'}) |
| 1441 | 50 | T | F | if ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a) |
| 1442 | 0 | T | F | if (my $c = $self->_code2country(lc $1)) |
| 1476 | 100 | T | F | if ($self->{'_timezone'}) |
| 1483 | 100 | T | F | if (defined $raw_ip) { } |
| 1487 | 100 | T | F | if ($raw_ip =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/a) { } |
| 50 | T | F | elsif ($raw_ip =~ /^([0-9a-fA-F:]{2,39}|[0-9a-fA-F:]{2,30}:(?:\d{1,3}\.){3}\d{1,3})$/a) { } |
| 1496 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_UNKNOWN) |
| 1499 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_PRESENT) |
| 1503 | 100 | T | F | unless ($self->{'_timezone'}) |
| 1504 | 50 | T | F | if (eval {
do {
require LWP::Simple::WithCache;
require JSON::Parse
}
}) { } |
| 50 | T | F | elsif (eval {
do {
require LWP::Simple;
require JSON::Parse
}
}) { } |
| 1509 | 0 | T | F | if (my $data = LWP::Simple::WithCache::get("http://ip-api.com/json/$ip")) |
| 1511 | 0 | T | F | if $@ |
| 1518 | 0 | T | F | if (my $data = LWP::Simple::get("http://ip-api.com/json/$ip")) |
| 1520 | 0 | T | F | if $@ |
| 1530 | 50 | T | F | if (open my $fin, '<', '/etc/timezone') { } |
| 1539 | 100 | T | F | unless (defined $self->{'_timezone'}) |
| 1561 | 100 | T | F | $RTL_LANGS{$self->language_code_alpha2 // ''} ? : |
| 1579 | 100 | T | F | $self->is_rtl ? : |
| 1746 | 0 | T | F | int $_[0] == 1 ? : |
| 1783 | 100 | T | F | unless defined $dir |
| 1788 | 50 | T | F | if (my $sub = $self->sublanguage_code_alpha2) |
| 1791 | 50 | T | F | if defined $self->language_code_alpha2 |
| 1796 | 100 | T | F | if -e $path |
| 1811 | 100 | T | F | unless $code |
| 1812 | 100 | T | F | if (defined $self->{'_country'}) { } |
| 1818 | 100 | T | F | unless ($self->{'_cache'}) |
| 1822 | 100 | T | F | if (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2language:$code")) |
| 1831 | 100 | T | F | if (defined $name) |
| 1847 | 100 | T | F | unless $code |
| 1848 | 100 | T | F | if ($self->{'_country'}) { } |
| 1858 | 50 | T | F | unless $_[0] =~ /No result found in country table/ |
| 1876 | 100 | T | F | unless $code |
| 1879 | 100 | T | F | unless ($self->{'_cache'}) |
| 1881 | 100 | T | F | defined $country ? : |
| 1884 | 100 | T | F | if (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2countryname:$code")) |
| 1889 | 100 | T | F | if (my $country = $self->_code2country($code)) |
| 1912 | 100 | T | F | unless ref $self and scalar @messages |
| 1915 | 100 | T | F | unless length $text |
| 1918 | 100 | T | F | if (my $logger = $self->{'logger'}) |
| 1938 | 100 | T | F | if (defined $self->{'logger'}) { } |