IP-World

 view release on metacpan or  search on metacpan

lib/IP/World.pod  view on Meta::CPAN

Mmap, keeps data in Mmap memory, may reduce total memory 
requirement of sibling processes. If your system doesn't support Mmap, 
1 operates like 0.

=item 2 or IP_WORLD_TINY

tiny, slow but saves memory by searching the database on disk using traditional
C library I/O calls.

=item 3 or IP_WORLD_TINY_PERL

tiny PerlIO, slow but saves memory by searching the database on disk using Perl
I/O calls.  If your system doesn't support Perl I/O, 3 works like 2.  If it
does, performance may differ between this option and the preceding one.

=back

=head3 getcc

  $ccod = $ipw->getcc($ipad);

I<$ipad> should contain an IP4 address in one of two formats:

=over 4

=item * a I<dotted quad> string like C<'13.117.255.3'>

=item * a 4-byte packed binary string produced by I<inet_aton> or
C<pack('C4', four values 0-255)>

=back

The return value from I<getcc> will always be a 2-character string.
For most IP addresses this will be one of the codes defined in
the ISO-3166 standard.  You can see these codes on
L<http://www.iso.org/iso/english_country_names_and_code_elements>.

Two return values indicate problems in determining the country code:

=over 4

=item * ** indicates that I<$ipad> was not in either of the
two formats described above.

=item * ?? indicates that the database doesn't include a mapping
for the IP address.

=back

=head2 SCRIPTS

Three Perl scripts are installed with IP::World:

=head3 maint_ip_world_db

The application checks whether new data is available from either data 
source.  If there is, it downloads the data and builds a new database.

You can run this manually to check for a new database, or (on a
server or other 24/7 system) you can schedule it for automatic
execution at a non-busy time.

In either case you should run I<maint_ip_world_db> with privilege to
rewrite the database file.  For Unix/Linux systems this means
running it as I<root>, such as by entering the command
C<sudo maint_ip_world_db>.

During installation, you will be asked if a command should be
executed by I<maint_ip_world_db> when a new database has been
created (e.g., to restart a web server that uses the database).

The install process for IP::World runs I<maint_ip_world_db> to ensure
that the most recent data is installed.  

=head3 ip_world_dump

Lists the database created by I<maint_ip_world_db>.

=head3 ip_cc_benchmark

Compares the performance of IP::World with that of similar modules.

=head2 PERFORMANCE

I<ip-benchmark> showed the following results in one run on the 
author's server:

  Module                       Total uS  uS/call  % not covered
  Geo::IP Standard               281982    68.84  32
  Geo::IP Memory Cache            25626     6.26  32
  IP::Country::Fast              131887    32.20  29
  IP::Country::Fast    packed    101378    24.75  29
  IP::World fast                   9311     2.27  27
  IP::World fast       packed      6965     1.70  27
  IP::World mmap                   9084     2.22  27
  IP::World mmap       packed      7023     1.71  27
  IP::World tinyC                207054    50.55  27
  IP::World tinyC      packed    210123    51.30  27
  IP::World tinyPerl             654634   159.82  27
  IP::World tinyPerl   packed    554801   135.45  27

I<packed> indicates conversion of a packed 32-bit IP address rather
than a text address.  I<ip-benchmark> uses the same set of random 
IP addresses for all of the modules in each execution.

=head2 TERMINOLOGY

Our scripts I<ip_world_dump> and I<ip-benchmark> both use the term 
'not covered' to describe IP addresses that do not map to country 
codes.  These fall into 4 categories:

=over 4

=item addresses that were once used but are no longer used,

=item addresses that are assigned for private use,

=item addresses that are not assigned/allocated, and

=item addresses that were assigned/allocated in the last month 
      or two, that our data sources do not yet include. 



( run in 3.158 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )