Well, yes, throw and catch sounds like GOTO :) On the other hand, I it's IMO great idea (not mine) how to exit from a nested loop.

Your chained command with values.any? went similar way as my first "another example" and your one is a bit better. On the other hand, both are veeeery bad for understanding by someone who doesn't know what it should do. And it's too long.