NAME

    NetAddr::IP::LazyInit - NetAddr::IP objects with deferred validation
    SEE DESCRIPTION BEFORE USING

VERSION

    0.5

SYNOPSIS

        use NetAddr::IP::LazyInit;
    
        my $ip = new NetAddr::IP::LazyInit( '10.10.10.5' );

DESCRIPTION

    This module is designed to quickly create objects that may become
    NetAddr::IP objects. It accepts anything you pass to it without
    validation. Once a method is called that requires operating on the
    value, the full NetAddr::IP object is constructed.

    You can see from the benchmarks that once you need to instantiate
    NetAddr::IP the speed becomes worse than if you had not used this
    module. What I mean is that this adds unneeded overhead if you intend
    to do IP operations on every object you create.

WARNING

    Because validation is deferred, this module assumes you will only ever
    give it valid data. If you try to give it anything else, it will
    happily accept it and then die once it needs to inflate into a
    NetAddr::IP object.

CREDITS

    This module was inspired by discussion with Jan Henning Thorsen,
    <jhthorsen at cpan.org>, and example code he provided. The namespace
    and part of the documentation/source is inspired by DateTime::LazyInit
    by Rick Measham, <rickm@cpan.org>

    I didn't have to do much so I hate to take author credit, but I am
    providing the module, so complaints can go to me.

    Robert Drake, <rdrake@cpan.org>

TODO

    If we could actually load NetAddr::IP objects in the background while
    nothing is going on that would be neat. Or we could create shortcut
    methods when the user knows what type of input he has.
    new_from_ipv4('ip','mask'). We might be able to use Socket to build the
    raw materials and bless a new NetAddr::IP object without going through
    it's validation.

COPYRIGHT AND LICENSE

    Copyright (C) 2014 by Robert Drake

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself, either Perl version 5.8.7 or, at
    your option, any later version of Perl 5 you may have available.

METHODS

 new

    This replaces the NetAddr::IP->new method with a stub that stores the
    arguments supplied in a temporary variable and returns immediately. No
    validation is performed.

    Once you call a method that can't be handled by LazyInit, a full
    NetAddr::IP object is built and the request passed into that object.

       my $ip = NetAddr::IP::LazyInit->new("127.0.0.1");

 new_ipv4

    Create a real NetAddr::IP from a single IPv4 address with almost no
    validation. This has more overhead than the LazyInit new() but it's
    much faster if you make use of the IP object.

    This only takes one argument, the single IP address. Anything else will
    fail in (probably) bad ways. Validation is completely up to you and is
    not done here.

       my $ip = NetAddr::IP::LazyInit->new_ipv4("127.0.0.1");

 new_ipv4_mask

    Create a real NetAddr::IP from a IPv4 subnet with almost no validation.
    This has more overhead than the LazyInit new() but it's much faster if
    you make use of the IP object.

    This requires the IP address and the subnet mask as it's two arguments.
    Anything else will fail in (probably) bad ways. Validation is
    completely up to the caller is not done here.

       my $ip = NetAddr::IP::LazyInit->new_ipv4_mask("127.0.0.0", "255.255.255.0");

 new_ipv6

    Create a real NetAddr::IP object from an IPv6 subnet with no
    validation. This is almost as fast as the lazy object. The only caveat
    being it requires a cidr mask.

       my $ip = NetAddr::IP::LazyInit->new_ipv6("fe80::/64");

 addr

    Returns the IP address of the object. If we can extract the IP as a
    string without converting to a real NetAddr::IP object, then we return
    that. Currently it only returns IPv6 strings in lower case, which may
    break your application if you aren't using the new standard.

        my $ip = NetAddr::IP::LazyInit->new("127.0.0.1");
        print $ip->addr;

 mask

    Returns the subnet mask of the object. If the user used the two
    argument option then it returns the string they provided for the second
    argument. Otherwise this will inflate to build a real NetAddr::IP
    object and return the mask.

        my $ip = NetAddr::IP::LazyInit->new("127.0.0.1", "255.255.255.0");
        print $ip->mask;

