制御構造はスコープを作らない

while や for がスコープを作らないのに対し、loop や each などのイテレータはスコープを作ります。

な、なんですとー!コード見直さなきゃ!

重複したループを抜けるには、break ではなく catch/throw を使用します。

catch(:last) {
  while true
    (1..5).each{|x|
      throw :last if x == 3
      print "#{x}\n"
    }
  end
}

参考になる +1…まあそもそも、ネストするループから抜けないといけないというコードの構造に問題がありそうな気もするけど。