in reply to RFC and debugging tips

And the best way of debugging the problem?

Were I to try to debug this, I would first rework the code to be a lot more readable. I tried to work my way through this by sight, and gave up as soon as I got to the map{} that embedded an expression combining && and 'and', and a reference. Yikes.

Look at this code from the perspective of trying to follow it by single stepping in the debugger (or setting breakpoints). For that to work, you need lines that don't try to do too much.

Might it not be easier to debug code that read

if ( 0 == @_ ) { if ( 0 < @fifo && $next < @fifo ) { return $fifo[$next++]; } else { $next = 0; return; } } elsif defined($_[0]) { ... and so on } else { ... handle 'reset' et al. }
Code like this stands a chance of being debugable using the debugger, and a better chance of being debuggable by inspection.