Be aware that switching from die to incrementing a variable means the engine will continue trying to match (potentially expensive) alternatives after the first premature end of string condition. dieing would short circuit immediately. If you want to avoid recompiling once the stream has run out, you could use something like die unless $end_of_stream where the flag is set by the main loop when the respective condition is met.