# Process a line and split out the data into variables
my $function = sub {
my ($arr) = @_;
my ( $ipaddress, $prefix, $ripe, $interface, $device, $location,
$comment )
= @$arr;
s/^\s+|\s+$//g
for ( $ipaddress, $prefix, $interface, $device, $location,
$comment );
if ( is_ipv4($ipaddress) ) {
store_subnet( $ipaddress, $prefix ) if $prefix;
####
# Produce IP subnets from the list of IPs
sub store_subnet {
my ( $ip, $len ) = @_;
my $ipn = unpack "N", Socket::inet_aton $ip;
$len =~ s/^\///;
my $maskn = 0xFFFFFFFF << ( 32 - $len );
$ipn = $ipn & $maskn;
$ip = Socket::inet_ntoa pack "N", $ipn;
$subnets{"$ip,$len"} = { ipn => $ipn, maskn => $maskn };
}
####
# Print it out
print "subnet,prefix\n";
print "$_\n"
for sort { $subnets{$a}{ipn} <=> $subnets{$b}{ipn} }
keys %subnets;
####
sub store_subnet {
my ( $ip, $len, $comment ) = @_;
my $ipn = unpack "N", Socket::inet_aton $ip;
$len =~ s/^\///;
my $maskn = 0xFFFFFFFF << ( 32 - $len );
$ipn = $ipn & $maskn;
$ip = Socket::inet_ntoa pack "N", $ipn;
$subnets{"$ip,$len,$comment"} = { ipn => $ipn, maskn => $maskn, name => $comment };
}
####
print "subnet,prefix,name\n";
print "$_\n"
for sort { $subnets{$a}{ipn} <=> $subnets{$b}{ipn} }
keys %subnets;