Net-TinyIp

 view release on metacpan or  search on metacpan

lib/Net/TinyIp.pm  view on Meta::CPAN


use overload q{""} => \&human_readable;

our $VERSION = "0.08";

sub import {
    my $class = shift;
    my @tags  = @_;

    foreach my $tag ( @tags ) {
        my $module = join q{::}, $class, "Util", join q{}, map { ucfirst } split m{_}, $tag;
        eval "require $module"
            or die;
        $module->import;
    }
}

sub new {
    my $class   = shift;
    my $address = shift;
    my %self;

    my( $host, $cidr ) = split m{/}, $address;

    my $version = $host =~ m{[.]} ? 4 : $host =~ m{[:]} ? 6 : undef;
    my $module  = join q{::}, $class, "Address", "v$version";

    unless ( defined $cidr ) {
        $cidr = $module->get( "bits_length" );
    }

    $self{host} = $module->from_string( $host );
    $self{mask} = $module->from_cidr( $cidr );

lib/Net/TinyIp/Address/v4.pm  view on Meta::CPAN

Readonly our $BLOCK_LENGTH   => 4;
Readonly our $BITS_LENGTH    => $BITS_PER_BLOCK * $BLOCK_LENGTH;
Readonly our $SEPARATOR      => q{.};

our $BLOCK_FORMAT = q{%03d};

sub from_string {
    my $class = shift;
    my $str   = shift;

    return $class->from_bin( join q{}, q{0b}, map { sprintf "%0${BITS_PER_BLOCK}b", $_ } split m{[$SEPARATOR]}, $str );
}

1;

lib/Net/TinyIp/Address/v6.pm  view on Meta::CPAN

Readonly our $BLOCK_LENGTH   => 8;
Readonly our $BITS_LENGTH    => $BITS_PER_BLOCK * $BLOCK_LENGTH;
Readonly our $SEPARATOR      => q{:};

our $BLOCK_FORMAT = q{%04x};

sub from_string {
    my $class = shift;
    my $str   = shift;

    return $class->from_hex( join q{}, q{0x}, map { $_ } split m{[$SEPARATOR]}, $str );
}

1;



( run in 1.340 second using v1.01-cache-2.11-cpan-71847e10f99 )