in reply to Generating IPv6 Masks

vec is useful for manipulating bit fields:
sub make_netmask { my $mask = shift; return if $mask < 0 or $mask > 128; my $str = "\0" x 16; vec( $str, 127-$_, 1) = 0b1 foreach 0..$mask-1; return map{ vec $str, $_, 8 } reverse 0 .. 15; }

-Mark