与えられた文字列を1行ずつ処理しようとして、
str.split(/\r?\n/).each { |l| ... }
とかやってはまってしまいました。
"\na".split(/\r?\n/) -> ["", "a"]
とか、
"\n\na".split(/\r?\n/) -> ["", "", "a"]
は期待通りなんですが、空行が末尾にくると
"\n".split(/\r?\n/) -> [] (期待は[""]) "\n\n".split(/\r?\n/) -> [] (期待は["", ""])
となってしまいます。
で、迷走して
"\n".split(/\r?\n/, -1)[0..-2] -> [""]
とかやってたんですが、今度は処理する文字列の最後に改行がない場合にうまくいかない。
とかさんざんやった後からeach_lineメソッドを見つけたりするわけです。というわけで正解は以下。
str.each_line { |l| l.chomp! ... }