The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use NetAddr::IP::Lite;

my $nets = {
    '10.0.0.16'		=> [ 24, '10.0.0.1', '10.0.0.254', '10.0.0.11'],
    '10.0.0.5'		=> [ 30, '10.0.0.5', '10.0.0.6', 'undef' ],
    '10.128.0.1'	=> [ 8, '10.0.0.1', '10.255.255.254', '10.0.0.11'],
    '10.128.0.1'	=> [ 24, '10.128.0.1', '10.128.0.254', '10.128.0.11'],
};

$| = 1;
print "1..", (3 * scalar keys %$nets), "\n";

my $count = 1;

for my $a (keys %$nets) {
    my $ip = new NetAddr::IP::Lite $a, $nets->{$a}->[0];
    print '', (($ip->first->addr	ne $nets->{$a}->[1] ? 
	    'not ' : ''), 
	   "ok ", $count++, "\n");
    print '', (($ip->last->addr		ne $nets->{$a}->[2] ? 
	    'not ' : ''), 
	   "ok ", $count++, "\n");

    my $new = $ip->nth(10);
    print '', (((defined $new ? $new->addr : 'undef') ne $nets->{$a}->[3] ? 
	    'not ' : ''), 
	   "ok ", $count++, "\n");
}