二重ループ

def twin_loop(a,b)
  a.each {|x| b.each {|y| yield(x,y) }}
end

と書いてみたが,

  twin_loop(ARGF, rexs) {|l,x|
    if x =~ l
      puts "#{ARGF.filename} #{ARGF.file.lineno}:#{l}"
      flag_found = true
      break
    end
  }

  ARGF.each {|l|
    rexs.each {|x|
      if x =~ l
        puts "#{ARGF.filename} #{ARGF.file.lineno}:#{l}"
        flag_found = true
        break # 一つでも見つけたらその行のチェックはやめる
      end
    }
  }

と等価にならず,breakで外のループも抜けてしまう.当たり前か.

適当にtwin-loopとか書いたけど,正しくはnested-loop?英語は分りません.