$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; ...