@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