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