%PDF- %PDF-
Direktori : /data/old/usr/share/perl5/vendor_perl/Net/IP/ |
Current File : //data/old/usr/share/perl5/vendor_perl/Net/IP/Minimal.pm |
package Net::IP::Minimal; { $Net::IP::Minimal::VERSION = '0.02'; } #ABSTRACT: Minimal functions from Net::IP use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(ip_get_version ip_is_ipv4 ip_is_ipv6); our %EXPORT_TAGS = ( 'PROC' => [ @EXPORT_OK ] ); sub ip_get_version { my $ip = shift; # If the address does not contain any ':', maybe it's IPv4 $ip !~ /:/ and ip_is_ipv4($ip) and return '4'; # Is it IPv6 ? ip_is_ipv6($ip) and return '6'; return; } sub ip_is_ipv4 { my @field = split /\./, shift; return 0 if @field > 4; # too many fields return 0 if @field == 0; # no fields at all foreach ( @field ) { return 0 unless /./; # reject if empty return 0 if /[^0-9]/; # reject non-digit return 0 if $_ > 255; # reject bad value } return 1; } sub ip_is_ipv6 { for ( shift ) { my @field = split /:/; # split into fields return 0 if (@field < 3) or (@field > 8); return 0 if /::.*::/; # reject multiple :: if ( /\./ ) { # IPv6:IPv4 return 0 unless _ip_is_ipv4(pop @field); } foreach ( @field ) { next unless /./; # skip :: return 0 if /[^0-9a-f]/i; # reject non-hexdigit return 0 if length $_ > 4; # reject bad value } } return 1; } qq[IP freely]; __END__ =pod =head1 NAME Net::IP::Minimal - Minimal functions from Net::IP =head1 VERSION version 0.02 =head1 SYNOPSIS use Net::IP::Minimal qw[:PROC]; my $ip = '172.16.0.216'; ip_is_ipv4( $ip ) and print "$ip is IPv4"; $ip = 'dead:beef:89ab:cdef:0123:4567:89ab:cdef'; ip_is_ipv6( $ip ) and print "$ip is IPv6"; print ip_get_version( $ip ); =head1 DESCRIPTION L<Net::IP> is very feature complete, but I found I was only using three of its functions and it uses quite a bit of memory L<https://rt.cpan.org/Public/Bug/Display.html?id=24525>. This module only provides the minimal number of functions that I use in my modules. =head1 FUNCTIONS The same as L<Net::IP> these functions are not exported by default. You may import them explicitly or use C<:PROC> to import them all. =over =item C<ip_get_version> Try to guess the IP version of an IP address. Params : IP address Returns : 4, 6, undef(unable to determine) C<$version = ip_get_version ($ip)> =item C<ip_is_ipv4> Check if an IP address is of type 4. Params : IP address Returns : 1 (yes) or 0 (no) C<ip_is_ipv4($ip) and print "$ip is IPv4";> =item C<ip_is_ipv6> Check if an IP address is of type 6. Params : IP address Returns : 1 (yes) or 0 (no) C<ip_is_ipv6($ip) and print "$ip is IPv6";> =back =head1 SEE ALSO L<Net::IP> =head1 AUTHOR Chris Williams <chris@bingosnet.co.uk> =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Chris Williams and RIPE-NCC. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut