| line | % | coverage | branch |
| 154 | 100 | T | F | if (not defined $class) { } |
| 100 | T | F | elsif (ref $class) { } |
| 155 | 50 | T | F | if ($params) |
| 156 | 50 | T | F | if (my $logger = $params->{'logger'}) |
| 164 | 50 | T | F | if defined $params->{'supported'} |
| 171 | 100 | T | F | if (defined $params->{'logger'} and &blessed($params->{'logger'})) |
| 172 | 100 | T | F | unless ($params->{'logger'}->can("warn") and $params->{'logger'}->can("info") and $params->{'logger'}->can("error")) |
| 185 | 100 | T | F | if (defined $params->{'supported'}) { } |
| 187 | 100 | T | F | if (ref $params->{'supported'}) { } |
| 100 | T | F | elsif (length $params->{'supported'} < 2 or length $params->{'supported'} > 5) { } |
| 188 | 100 | T | F | if (ref $params->{'supported'} ne "ARRAY") |
| 195 | 50 | T | F | if (my $logger = $params->{'logger'}) |
| 205 | 100 | T | F | if ($cache and $ENV{'REMOTE_ADDR'}) |
| 207 | 100 | T | F | if (my $frozen = $cache->get($key)) |
| 215 | 50 | T | F | unless (defined $rc and ref $rc eq "HASH") |
| 218 | 50 | T | F | if (defined $rc) |
| 231 | 50 | T | F | if ($rc->{'_what_language'} || $rc->{'_rlanguage'} and $info and $info->lang) |
| 249 | 100 | T | F | ref $params->{'supported'} ? : |
| 270 | 100 | T | F | if ($info and $l = $info->lang) { } |
| 100 | T | F | elsif ($l = $class->_what_language) { } |
| 281 | 100 | T | F | if (ref $params->{'supported'} eq 'ARRAY') { } |
| 292 | 50 | T | F | if (defined $^V and $^V ge "v5.14.0") |
| 293 | 50 | T | F | if ${^GLOBAL_PHASE} eq "DESTRUCT" |
| 295 | 100 | T | F | unless $ENV{'REMOTE_ADDR'} |
| 298 | 50 | T | F | unless ref $self |
| 301 | 100 | T | F | unless $cache |
| 309 | 100 | T | F | if $cache->get($key) |
| 359 | 100 | T | F | unless $self->{'_slanguage'} |
| 408 | 100 | T | F | unless $self->{'_slanguage'} |
| 438 | 100 | T | F | unless $self->{'_slanguage'} |
| 475 | 100 | T | F | unless $self->{'_slanguage'} |
| 503 | 100 | T | F | unless $self->{'_rlanguage'} |
| 524 | 100 | T | F | if (defined $http_accept_language) |
| 532 | 100 | T | F | if ($http_accept_language eq $DEPRECATED_EN_UK) |
| 542 | 100 | T | F | if ($l) { } |
| 100 | T | F | elsif ($http_accept_language =~ /;/) { } |
| 543 | 100 | T | F | if $self->_resolve_match($l, $requested_sublanguage, $http_accept_language) |
| 555 | 50 | T | F | if ($self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown") |
| 556 | 0 | T | F | if ($self->{'_rlanguage'} eq "Unknown") |
| 559 | 0 | T | F | if ($self->{'_rlanguage'}) |
| 560 | 0 | T | F | if (my $resolved = $self->_code2language($self->{'_rlanguage'})) |
| 568 | 100 | T | F | if (!$self->{'_rlanguage'} || $self->{'_rlanguage'} eq 'Unknown' and length $http_accept_language == 2 || $http_accept_language =~ /^..-..$/) |
| 577 | 100 | T | F | if $self->{'_dont_use_ip'} |
| 595 | 50 | T | F | unless $_[0] =~ /^Use of uninitialized value/ |
| 603 | 100 | T | F | if ($l and $http_accept_language =~ /-/ and not $http_accept_language =~ qr/$l/i) |
| 609 | 100 | T | F | unless ($l) |
| 615 | 100 | T | F | unless ($l) |
| 618 | 100 | T | F | if $l |
| 637 | 100 | T | F | if ($token =~ s/;\s*q\s*=\s*(\d+(?:\.\d+)?)//) |
| 641 | 50 | T | F | if length $token |
| 660 | 100 | T | F | unless $tag =~ /^(..)-(..)$/ |
| 663 | 100 | T | F | if ($i18n->accepts($base, $self->{'_supported'})) |
| 685 | 100 | T | F | if $tag =~ /^..-../ |
| 687 | 100 | T | F | if ($i18n->accepts($tag, $self->{'_supported'})) |
| 708 | 100 | T | F | if (not $l =~ /^..-../) { } |
| 50 | T | F | elsif ($l =~ /(.+)-(..)$/) { } |
| 730 | 100 | T | F | unless $self->{'_slanguage'} |
| 738 | 100 | T | F | if ($header =~ /..-(..)$/) { } |
| 100 | T | F | elsif ($header =~ /..-([a-z]{2,3})$/i) { } |
| 744 | 50 | T | F | if $@ |
| 747 | 100 | T | F | if ($sl) { } |
| 100 | T | F | elsif ($requested_sublanguage) { } |
| 750 | 100 | T | F | if (my $c = $self->_code2countryname($requested_sublanguage)) { } |
| 775 | 50 | T | F | if ($accepts) |
| 778 | 50 | T | F | if ($accepts =~ /\-/) { } |
| 783 | 0 | T | F | if ($self->{'_cache'}) |
| 787 | 0 | T | F | if ($from_cache) { } |
| 794 | 0 | T | F | if ($slanguage) |
| 798 | 0 | T | F | if ($variety eq "uk") |
| 803 | 0 | T | F | if (defined(my $c = $self->_code2countryname($variety))) |
| 810 | 0 | T | F | if ($self->{'_sublanguage'}) |
| 815 | 0 | T | F | unless ($from_cache) |
| 821 | 0 | T | F | if $self->{'_cache'} |
| 833 | 50 | T | F | unless $accepts |
| 840 | 50 | T | F | if ($variety =~ /[a-z]{2,3}/ and not defined $self->{'_sublanguage'}) |
| 844 | 50 | T | F | if ($variety eq "uk") |
| 850 | 100 | T | F | if ($self->{'_cache'}) |
| 854 | 100 | T | F | if (defined $from_cache) { } |
| 867 | 100 | T | F | if (defined $results[0]) { } |
| 874 | 100 | T | F | if ($@ or not defined $language_name) { } |
| 875 | 50 | T | F | if $@ |
| 882 | 100 | T | F | if ($self->{'_cache'} and not defined $from_cache) |
| 897 | 50 | T | F | if (defined $self->{'_sublanguage'}) |
| 919 | 100 | T | F | if (not defined $country and my $c = $self->_what_language) |
| 920 | 100 | T | F | if ($c =~ /^(..)_(..)/) { } |
| 100 | T | F | elsif ($c =~ /^(..)$/) { } |
| 926 | 100 | T | F | unless defined $country |
| 931 | 100 | T | F | if ($self->{'_cache'}) |
| 935 | 100 | T | F | if ($from_cache) { } |
| 940 | 100 | T | F | if ($l) |
| 942 | 50 | T | F | if (defined $l) |
| 945 | 50 | T | F | if $language_name |
| 951 | 100 | T | F | unless $language_name |
| 953 | 100 | T | F | if (not defined $self->{'_rlanguage'} or $self->{'_rlanguage'} eq "Unknown") |
| 957 | 50 | T | F | unless (exists $self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown") |
| 960 | 100 | T | F | if ($language_name and $language_code2 and not defined $http_accept_language) { } |
| 968 | 50 | T | F | unless ($code) |
| 969 | 0 | T | F | if ($http_accept_language and $http_accept_language ne $self->{'_rlanguage'}) |
| 973 | 0 | T | F | unless ($code) |
| 975 | 0 | T | F | if ($self->{'_rlanguage'} =~ /(.+)\s\(.+/) |
| 976 | 0 | T | F | if (not defined $http_accept_language or $1 ne $self->{'_rlanguage'}) |
| 981 | 0 | T | F | unless ($code) |
| 990 | 50 | T | F | if ($code) |
| 992 | 50 | T | F | if ($self->{'_slanguage'}) { } |
| 1002 | 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'}) { } |
| 1025 | 100 | T | F | /^(.+)-/ ? : |
| 1027 | 100 | T | F | if (exists $base_languages{$language_string}) |
| 1044 | 100 | T | F | if (ref $self) |
| 1046 | 100 | T | F | if (defined $self->{'_what_language'}) |
| 1050 | 100 | T | F | if (my $info = $self->{'_info'}) |
| 1051 | 50 | T | F | if (my $rc = $info->lang) |
| 1058 | 100 | T | F | if (my $raw_lang = $ENV{'HTTP_ACCEPT_LANGUAGE'}) |
| 1060 | 100 | T | F | if ($raw_lang =~ /^([A-Za-z0-9\-,;=.*\s]{1,$ACCEPT_LANG_MAX})$/a) { } |
| 50 | T | F | elsif (ref $self) { } |
| 1062 | 100 | T | F | if (ref $self) |
| 1071 | 100 | T | F | if (defined $ENV{'LANG'}) |
| 1077 | 100 | T | F | if ($ENV{'LANG'} =~ /^([A-Za-z0-9_.\-]{1,$ACCEPT_LANG_MAX})$/a) { } |
| 50 | T | F | elsif (ref $self) { } |
| 1079 | 50 | T | F | if (ref $self) |
| 1153 | 100 | T | F | if ($self->{'_country'}) |
| 1159 | 100 | T | F | if (defined $ENV{'GEOIP_COUNTRY_CODE'}) |
| 1160 | 100 | T | F | if ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a) { } |
| 1169 | 100 | T | F | if ($ENV{'HTTP_CF_IPCOUNTRY'} and $ENV{'HTTP_CF_IPCOUNTRY'} ne "XX") |
| 1170 | 100 | T | F | if ($ENV{'HTTP_CF_IPCOUNTRY'} =~ /^([A-Z]{2})$/a) { } |
| 1179 | 100 | T | F | unless defined $raw_ip |
| 1183 | 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) { } |
| 1195 | 100 | T | F | unless (is_ipv4($ip)) |
| 1197 | 100 | T | F | if ($ip eq '::1') { } |
| 100 | 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)) { } |
| 1204 | 100 | T | F | unless (is_ipv4($ip)) |
| 1213 | 100 | T | F | if (is_private_ip($ip)) |
| 1217 | 100 | T | F | if (is_loopback_ip($ip)) |
| 1223 | 100 | T | F | if ($self->{'_cache'}) |
| 1225 | 100 | T | F | if (defined $self->{'_country'}) |
| 1226 | 100 | T | F | if (not $self->{'_country'} =~ /\D/) { } |
| 1239 | 50 | T | F | if ($self->{'_have_ipcountry'} == $GEO_UNKNOWN) |
| 1240 | 0 | T | F | if (eval {
do {
require IP::Country::Fast
}
}) { } |
| 1251 | 100 | T | F | if ($self->{'_have_ipcountry'}) |
| 1253 | 100 | T | F | if ($self->{'_country'}) { } |
| 50 | T | F | elsif (is_ipv4($ip)) { } |
| 1261 | 100 | T | F | unless (defined $self->{'_country'}) |
| 1262 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_UNKNOWN) |
| 1265 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_PRESENT) |
| 1270 | 100 | T | F | if (not defined $self->{'_country'} and $ip ne $BROKEN_GEOIPFREE) |
| 1271 | 50 | T | F | if ($self->{'_have_geoipfree'} == $GEO_UNKNOWN) |
| 1273 | 0 | T | F | if ($@) { } |
| 1283 | 100 | T | F | if ($self->{'_have_geoipfree'} == $GEO_PRESENT) |
| 1284 | 50 | T | F | if (my $country = ($self->{'_geoipfree'}->LookUp($ip))[0]) |
| 1292 | 100 | T | F | if ($self->{'_country'} and $self->{'_country'} eq "eu") |
| 1297 | 50 | T | F | if (not $self->{'_country'} and eval {
do {
require LWP::Simple::WithCache;
require JSON::Parse
}
}) |
| 1301 | 0 | T | F | if (my $data = LWP::Simple::WithCache::get("https://www.geoplugin.net/json.gp?ip=$ip")) |
| 1303 | 0 | T | F | if $@ |
| 1308 | 100 | T | F | unless ($self->{'_country'}) |
| 1313 | 100 | T | F | if ($self->{'_country'}) |
| 1314 | 100 | T | F | if (not $self->{'_country'} =~ /\D/) { } |
| 1321 | 100 | T | F | if ($self->{'_country'} eq 'hk') { } |
| 100 | T | F | elsif ($self->{'_country'} eq 'eu') { } |
| 1327 | 50 | T | F | if ($self->{'_country'} and not $self->{'_country'} =~ /\D/) { } |
| 50 | T | F | elsif ($self->{'_country'} and $self->{'_country'} ne 'Unknown' and not $self->{'_country'} =~ /^[a-z]{2}$/) { } |
| 100 | T | F | elsif ($self->{'_country'} and $self->{'_cache'}) { } |
| 1376 | 100 | T | F | unless ($@ or not defined $whois or ref $whois ne "HASH") |
| 1377 | 100 | T | F | if (defined $whois->{'Country'}) { } |
| 50 | T | F | elsif (defined $whois->{'country'}) { } |
| 1382 | 50 | T | F | if ($self->{'_country'}) |
| 1383 | 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') { } |
| 1392 | 100 | T | F | if ($self->{'_country'}) |
| 1397 | 100 | T | F | if defined $self->{'_country'} |
| 1408 | 50 | T | F | unless ($@) |
| 1413 | 100 | T | F | if ($self->{'_country'}) |
| 1415 | 50 | T | F | unless defined $self->{'_country'} |
| 1433 | 100 | T | F | if ($raw =~ /^([A-Za-z]{2})\s*(?:#.*)?$/) |
| 1453 | 100 | T | F | if (subnet_matcher($BAIDU_SUBNET)->($ip)) { } |
| 1479 | 50 | T | F | unless ($db_present) |
| 1485 | 0 | T | F | if ($@) |
| 1494 | 0 | T | F | if (-r '/usr/share/GeoIP/GeoIP.dat') { } |
| 1539 | 100 | T | F | if $self->{'_locale'} |
| 1545 | 100 | T | F | if (defined(my $raw_agent = $ENV{'HTTP_USER_AGENT'})) |
| 1546 | 100 | T | F | if ($raw_agent =~ /^([\x20-\x7e]{1,$UA_MAX})$/a) { } |
| 1554 | 100 | T | F | if (defined $agent and $agent =~ /\((.+)\)/) |
| 1559 | 100 | T | F | if ($candidate =~ /^[a-zA-Z]{2}-([a-zA-Z]{2})$/) |
| 1561 | 50 | T | F | if (my $c = $self->_code2country($1)) |
| 1569 | 50 | T | F | if (eval {
do {
require HTTP::BrowserDetect
}
}) |
| 1574 | 50 | T | F | if ($browser) |
| 1576 | 100 | T | F | if ($bc =~ /^([A-Za-z]{2})$/a) |
| 1577 | 50 | T | F | if (my $c = $self->_code2country($1)) |
| 1588 | 100 | T | F | if ($country) |
| 1595 | 50 | T | F | unless ($@) |
| 1596 | 50 | T | F | if ($c) |
| 1605 | 100 | T | F | if (defined $ENV{'GEOIP_COUNTRY_CODE'}) |
| 1606 | 50 | T | F | if ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a) |
| 1607 | 0 | T | F | if (my $c = $self->_code2country(lc $1)) |
| 1661 | 100 | T | F | if ($self->{'_timezone'}) |
| 1668 | 100 | T | F | if (defined $raw_ip) { } |
| 1672 | 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) { } |
| 1681 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_UNKNOWN) |
| 1684 | 100 | T | F | if ($self->{'_have_geoip'} == $GEO_PRESENT) |
| 1688 | 100 | T | F | unless ($self->{'_timezone'}) |
| 1689 | 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
}
}) { } |
| 1692 | 0 | T | F | if (my $data = LWP::Simple::WithCache::get("http://ip-api.com/json/$ip")) |
| 1694 | 0 | T | F | if $@ |
| 1699 | 0 | T | F | if (my $data = LWP::Simple::get("http://ip-api.com/json/$ip")) |
| 1701 | 0 | T | F | if $@ |
| 1711 | 50 | T | F | if (open my $fin, '<', '/etc/timezone') { } |
| 1724 | 50 | T | F | if (defined $self->{'_timezone'} and not $self->{'_timezone'} =~ m[^[A-Za-z][A-Za-z0-9_+\-/]{0,50}$]) |
| 1730 | 100 | T | F | unless (defined $self->{'_timezone'}) |
| 1758 | 100 | T | F | $RTL_LANGS{$self->language_code_alpha2 // ''} ? : |
| 1782 | 100 | T | F | $self->is_rtl ? : |
| 1956 | 50 | T | F | unless defined $n |
| 1958 | 0 | T | F | int $_[0] == 1 ? : |
| 2006 | 100 | T | F | unless defined $dir |
| 2012 | 50 | T | F | if ($dir =~ /\.\./ or $dir =~ /\x00/) |
| 2022 | 100 | T | F | unless ($ext =~ /^[A-Za-z0-9\-]+$/) |
| 2028 | 50 | T | F | if (my $sub = $self->sublanguage_code_alpha2) |
| 2031 | 50 | T | F | if defined $self->language_code_alpha2 |
| 2036 | 100 | T | F | if -e $path |
| 2051 | 100 | T | F | unless $code |
| 2052 | 100 | T | F | if (defined $self->{'_country'}) { } |
| 2058 | 100 | T | F | unless ($self->{'_cache'}) |
| 2062 | 100 | T | F | if (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2language:$code")) |
| 2071 | 100 | T | F | if (defined $name) |
| 2087 | 100 | T | F | unless $code |
| 2088 | 100 | T | F | if ($self->{'_country'}) { } |
| 2098 | 50 | T | F | unless $_[0] =~ /No result found in country table/ |
| 2116 | 100 | T | F | unless $code |
| 2119 | 100 | T | F | unless ($self->{'_cache'}) |
| 2121 | 100 | T | F | defined $country ? : |
| 2124 | 100 | T | F | if (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2countryname:$code")) |
| 2129 | 100 | T | F | if (my $country = $self->_code2country($code)) |
| 2152 | 100 | T | F | unless ref $self and scalar @messages |
| 2155 | 100 | T | F | unless length $text |
| 2158 | 100 | T | F | if (my $logger = $self->{'logger'}) |
| 2181 | 50 | T | F | ref $params ? : |
| 2183 | 100 | T | F | if (defined $self->{'logger'}) { } |