Roy Johnson,
The function isn't supposed to be called with any explicit args. That is the point of using the tail call optimization (re-using @_). I first auto-vivify the first element of @_ and then re-use it throughout. That part works great - it is the undefined $a and $b that baffles me. As does the mysterious *boom*.