in reply to Re: Variable initialization / reinitialization
in thread Variable initialization / reinitialization

Just wanted to thank you for your comment. It made a light go on in my head. The code is intended to validate an inverse mask. That's the inverse of a subnet mask - it masks off the network portion and keeps the host portion of an IP. In binary, that means it's 0 or more zeros followed by the rest of the string being all 1s. So, in dotted decimal format, you'll get 0 or more 0 octets, followed by 1 non-zero octet that is 1 less than a power of 2, followed by octets that are 255. But the binary representation is actually much easier to check for! So, with some help from The Perl Cookbook (for the pack/unpack cycle to convert a number to its binary string):
sub ValidateMasks() { my $mask = shift; return 0 if !defined $mask; my $binary_rep; my @octets = split (/\./, $mask); for my $octet (@octets) { $binary_rep .= substr(unpack("B32", pack("N", $octet)), -8); } return $binary_rep =~ /^0*1*$/; }