Net-CIDR-MobileJP
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Net/CIDR/MobileJP.pm view on Meta::CPAN
package Net::CIDR::MobileJP;
use strict;
use warnings;
use 5.00800;
use Carp;
use Net::CIDR::Lite;
use File::ShareDir ();
our $VERSION = '0.24';
our $yaml_loader;
BEGIN {
$yaml_loader = sub {
## no critic
if (eval "use YAML::Syck; 1;") {
\&YAML::Syck::LoadFile;
} else {
require YAML;
\&YAML::LoadFile;
}
}->();
};
sub new {
my ($class, $stuff) = @_;
return bless {spanner => $class->_create_spanner($class->_load_config($stuff))}, $class;
}
sub _create_spanner {
my ($class, $conf) = @_;
my $spanner = Net::CIDR::Lite::Span->new;
while (my ($carrier, $ip_ranges) = each %$conf) {
$spanner->add(do {
my $cidr = Net::CIDR::Lite->new;
for my $ip_range (@$ip_ranges) {
$cidr->add($ip_range);
}
$cidr;
}, $carrier);
}
return $spanner;
}
sub _load_config {
my ($self, $stuff) = @_;
my $data;
if (defined $stuff && -f $stuff && -r _) {
# load yaml from file
$data = $yaml_loader->($stuff);
} elsif ($stuff) {
# raw data
$data = $stuff;
} else {
# generated file
my $file = eval {
# use module_file first, this is needed by backward-compatibility
File::ShareDir::module_file( 'Net::CIDR::MobileJP', 'cidr.yaml' )
} || eval {
File::ShareDir::dist_file( 'Net-CIDR-MobileJP', 'cidr.yaml' )
};
die $@ unless $file;
$data = $yaml_loader->($file);
}
return $data;
}
sub get_carrier {
my ($self, $ip) = @_;
my ($carrier,) = map { keys %$_ } values %{$self->{spanner}->find($ip)};
return $carrier || 'N';
}
1;
__END__
=head1 NAME
Net::CIDR::MobileJP - mobile ip address in Japan
=head1 SYNOPSIS
use Net::CIDR::MobileJP;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.012 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )