/usr/lib/x86_64-linux-gnu/perl5/5.20/auto/NetAddr/IP/compactref.al is in libnetaddr-ip-perl 4.075+dfsg-1+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | # NOTE: Derived from blib/lib/NetAddr/IP.pm.
# Changes made here will be lost when autosplit is run again.
# See AutoSplit.pm.
package NetAddr::IP;
#line 1170 "blib/lib/NetAddr/IP.pm (autosplit into blib/lib/auto/NetAddr/IP/compactref.al)"
sub compactref($) {
# my @r = sort { NetAddr::IP::Lite::comp_addr_mask($a,$b) } @{$_[0]} # use overload 'cmp' function
# or return [];
# return [] unless @r;
my @r;
{
my $unr = [];
my $args = $_[0];
if (ref $_[0] eq __PACKAGE__ and ref $_[1] eq 'ARRAY') {
# ->compactref(\@list)
#
$unr = [$_[0], @{$_[1]}]; # keeping structures intact
}
else {
# Compact(@list) or ->compact(@list) or Compact(\@list)
#
$unr = $args;
}
return [] unless @$unr;
foreach(@$unr) {
$_->{addr} = $_->network->{addr};
}
@r = sort @$unr;
}
my $changed;
do {
$changed = 0;
for(my $i=0; $i <= $#r -1;$i++) {
if ($r[$i]->contains($r[$i +1])) {
splice(@r,$i +1,1);
++$changed;
--$i;
}
elsif ((notcontiguous($r[$i]->{mask}))[1] == (notcontiguous($r[$i +1]->{mask}))[1]) { # masks the same
if (hasbits($r[$i]->{addr} ^ $r[$i +1]->{addr})) { # if not the same netblock
my $upnet = $r[$i]->copy;
$upnet->{mask} = shiftleft($upnet->{mask},1);
if ($upnet->contains($r[$i +1])) { # adjacent nets in next net up
$r[$i] = $upnet;
splice(@r,$i +1,1);
++$changed;
--$i;
}
} else { # identical nets
splice(@r,$i +1,1);
++$changed;
--$i;
}
}
}
} while $changed;
return \@r;
}
# end of NetAddr::IP::compactref
1;
|