sub mask_short_to_long1 {
my @octets = unpack "C4", pack "V", 2 ** $_[0] -1 ;
@octets = map {unpack "C", pack "b8", sprintf "%08b", $_} @octets;
return join '.', @octets;
}
####
sub mask_short_to_long2 {
my @octets = unpack "b8b8b8b8", pack "V", 2 ** $_[0] -1 ;
@octets = map {ord pack "B8", $_} @octets;
return join '.', @octets;
}
####
sub mask_short_to_long3 {
my $mask = shift;
my @octets = (0,0,0,0);
for (@octets) {
$_ = $mask > 8 ? 255 : 256 - 2**(8-$mask);
$mask = $mask > 8 ? $mask -8 : 0;
}
join '.', @octets;
}
####
perl -le'print+join".",map{ord pack"B8",$_}unpack"b8"x4,pack"V",-1+2**pop' num