参照ってやつは、便利ですがやっかいでもあるものですね。
スクリプトを書く機会を得たので、意気揚々と書いてました。当初は長くても30分くらいで終わるだろうと目測を立て、念のために1時間ほど時間をもらって書き始めたのですが、1時間経っても終わりません。テキストファイルの特定の位置にフォーマットにしたがって特定のデータを挿入するという単純な処理なのですが、何故かコメント行だけが出力されないのです。「もしかして rubyと同じく #以降をコメントとしたせいか?」なんて疑いもしたのですが、原因は全然違う場所でした。

io = open("hogehoge.list", "r")
lines = io.readlines
io.close

lines.each { |line|
  line.gsub!("#.*", "")
  # lineを調べる処理
}

io = open("hogeout.list", "w")
lines.each { |line|
  io.puts line
  io.puts line.sub("AAA", "BBB") if A
}

こんな感じのコードです。当然、line.gsub!でlineに対して破壊的処理を行っているのが原因でした。linesの1つがlineという変数にデータコピーされるため、破壊的処理でも問題ないと勝手に解釈して書いてしまいました。ショックです。最近プログラムに触っていないので、プログラマ的な考えを忘れてしまっています。