$VERSION = "0.15";
I'm fairly certain that the first if/else in check_range should be swapped.
Correct code:
sub check_range {
...
if ($self->end_infinity == 0 && $self->start_infinity == 0) {
if ($self->start <= $value && $value <= $self->end) {
return $true;
} else {
return $false;
...