@ary = map { pack "B32", join "", (1) x $_, (0) x (32 - $_) } 0..31;
print unpack("B*",$_),"\n" for @ary;
####
$#ary = 31; # create an array of 32 empty slots
$c = 0; vec($_,0,32) = ~((1<<++$c)-1) for @ary;
@ary = reverse @ary;
# another way without $c
vec($ary[31+$_],0,32) = ~((1<<(-$_+1))-1) for -31..0;
print unpack("B*",$_),"\n" for @ary;
####
@ary = map { pack "B32", join "", (1) x $_, (0) x (32 - $_) } 0..31;
$dotted = "192.168.248.17";
$netmask = $ary[19]; # prefix 19, i.e. cidr 192.168.248.17/19
$address = pack "C4", split /\./, $dotted;
$network = $address & $netmask;
$broadcast = $address | ~ $netmask;
print $_,$/
for map {
join ".", unpack "C4", $_
} $netmask, $address, $network, $broadcast;
__END__
255.255.224.0
192.168.248.17
192.168.224.0
192.168.255.255
####
#!/usr/bin/perl
# file cidr
$m=pack B32,pop=~'/'x$';printf"$` network %vd broadcast %vd netmask %vd\n",($z=eval$`)&$m,$z|~$m,$m
####
qwurx [shmem] ~> cidr 192.168.248.17/19
192.168.248.17 network 192.168.224.0 broadcast 192.168.255.255 netmask 255.255.224.0