use NetAddr::IP::Lite qw(:old_nth); my $nets = { '10.0.0.16' => [ 24, '10.0.0.1', '10.0.0.254', '10.0.0.10'], '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.10'], '10.128.0.1' => [ 24, '10.128.0.1', '10.128.0.254', '10.128.0.10'], }; $| = 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"); }