#!/usr/bin/perl -w use strict; my (@chars, @charquads, @binquads, @intquads, $i, $bins, $mask); my %hex_to_bin = ( 0 => '0000', 1 => '0001', #unused 2 => '0010', #unused 3 => '0011', #unused 4 => '0100', #unused 5 => '0101', #unused 6 => '0110', #unused 7 => '0111', #unused 8 => '1000', 9 => '1001', #unused a => '1010', #unused b => '1011', #unused c => '1100', d => '1101', #unused e => '1110', f => '1111', ); print "netmask> "; while (<>) { @chars = split('', $_); undef @charquads; undef @binquads; $bins = ''; $mask = 0; for ($i = 0; $i < $#chars; $i += 2) { $charquads[$i] = $chars[$i]; $charquads[$i + 1] = $chars[$i + 1]; $binquads[$i / 2] = $hex_to_bin{$chars[$i]} . $hex_to_bin{$chars[$i + 1]}; $bins .= $hex_to_bin{$chars[$i]} . $hex_to_bin{$chars[$i + 1]}; } print "$bins\n"; foreach $i ((split('', $bins))) { $mask += $i; } print "/$mask\n"; for ($i = 0; $i < $#charquads; $i += 2) { print hex($charquads[$i] . $charquads[$i + 1]), ($i == ($#charquads - 1)) ? "\n" : "."; } for ($i = 0; $i <= $#binquads; $i++) { print "$binquads[$i]", ($i == $#binquads) ? "\n" : "."; } print "\nnetmask> "; }