The lisp example was recursive, so I made mine recursive. This is nebulous, abstract, and subjective. I realize this. I was attempting to model the Perl program after the logic of the LISP program as written, not after its compiled representation. I was attempting to "think in LISP" while programming in Perl.
Regardless of its utility, I provided a flexible next() because the LISP example did. I would add, however, that the flexible next is still compatible with the normal comparison as written for many types of iterations, in so long as the iterations cause A to increase, and have either no upper bound or an upper bound above B.