File Coverage

blib/lib/Net/DHCP/Packet/IPv4Utils.pm
Criterion Covered Total %
statement 36 36 100.0
branch 6 6 100.0
condition 11 12 91.6
subroutine 13 13 100.0
pod 6 6 100.0
total 72 73 98.6


line stmt bran cond sub pod time code
1             #!/bin/false
2             # PODNAME: Net::DHCP::Packet::IPv4Utils
3             # Author : D. Hamstead
4             # Original Author: F. van Dun, S. Hadinger
5             # ABSTRACT: Object methods for IPv4 in Net::DHCP
6 12     12   13174 use strict;
  12         11  
  12         254  
7 12     12   34 use warnings;
  12         12  
  12         254  
8 12     12   81 use 5.8.0;
  12         24  
9              
10             package Net::DHCP::Packet::IPv4Utils;
11             $Net::DHCP::Packet::IPv4Utils::VERSION = '0.7_007'; # TRIAL
12              
13             $Net::DHCP::Packet::IPv4Utils::VERSION = '0.7007';# standard module declaration
14             our ( @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS );
15 12     12   43 use Exporter;
  12         10  
  12         686  
16             @ISA = qw(Exporter);
17             @EXPORT = qw( ); # FIXME this is rude
18             @EXPORT_OK = qw( packinet packinets unpackinet unpackinets packinets_array unpackinets_array );
19             %EXPORT_TAGS = ( all => \@EXPORT_OK );
20              
21 12     12   38 use Carp;
  12         8  
  12         594  
22              
23             #=======================================================================
24             # never failing versions of the "Socket" module functions
25             sub packinet { # bullet-proof version, never complains
26 12     12   5820 use bytes;
  12         99  
  12         44  
27 51     51 1 70047 my $addr = shift;
28              
29 51 100 100     250 if ( $addr && $addr =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/ ) {
30 35         193 return chr($1) . chr($2) . chr($3) . chr($4);
31             }
32              
33 16         40 return "\0\0\0\0"
34             }
35              
36             sub unpackinet { # bullet-proof version, never complains
37 12     12   1131 use bytes;
  12         12  
  12         28  
38 44     44 1 48 my $ip = shift;
39 44 100 100     197 return '0.0.0.0' unless ( $ip && length($ip) == 4 );
40             return
41 32         149 ord( substr( $ip, 0, 1 ) ) . q|.|
42             . ord( substr( $ip, 1, 1 ) ) . q|.|
43             . ord( substr( $ip, 2, 1 ) ) . q|.|
44             . ord( substr( $ip, 3, 1 ) );
45             }
46              
47             sub packinets { # multiple ip addresses, space delimited
48             return join(
49 11   100 11 1 64 q(), map { packinet($_) }
  25         29  
50             split( /[\s\/,;]+/, shift || 0 )
51             );
52             }
53              
54             sub unpackinets { # multiple ip addresses
55 8   100 8 1 70 return join( q| |, map { unpackinet($_) } unpack( '(a4)*', shift || 0 ) );
  10         13  
56             }
57              
58             sub packinets_array { # multiple ip addresses, space delimited
59 11 100   11 1 515 return unless @_;
60 7         10 return join( q(), map { packinet($_) } @_ );
  11         14  
61             }
62              
63             sub unpackinets_array { # multiple ip addresses, returns an array
64 10   50 10 1 47 return map { unpackinet($_) } unpack( '(a4)*', shift || 0 );
  14         24  
65             }
66              
67             #=======================================================================
68              
69             1;
70              
71             __END__