NetAddr::IP provides an object-oriented abstraction on top of IP addresses
or IP subnets, that allows for easy manipulations.
The internal representation of all IP objects is in 128 bit IPv6 notation.
IPv4 and IPv6 objects may be freely mixed.
The following operations are supported:
Basic IP conversion, netmask manipulation, subnet interpretation, bitwise
mask generation, full mask generation, subnet manipulation, expansion, and
range operations, sub/supernet tests, data type determination, and more
complex operations such as expansion of netblocks into arrays of smaller
blocks of arbitrary size, and CIDR block aggregation