This version removes the global $errstr variable and switches to the same interface as Net::CIDR::Lookup::IPv6 that signals errors using exceptions.
So all menthods but new may now die if you don't wrap them in evalor equivalent.
dump is called more sensibly to_hash now.
Regular changes that shouldn't break anything:
Replaced the recursive implementations of lookup() and walk() with iterative ones for about a 30% speed increase.
Replaced the simplistic list-based CIDR block splitting function with bit-fiddling for about a threefold speedup of add_num_range and slightly less in add_range.
Recursive merging-up up of blocks during add_* works now.
you had a /24 and an adjacent /25 net with the same value before,
adding a new /25 would have merged the new block with the existing /25,
resulting in two adjacent /24s with the same value because only single-level merging was possible.
Now the two will be merged to a single /23.
Removed some redundant tests and added new ones.
Removed some leftover debug code.
Some small fixes/improvements like stricter range checking in add_range