■
参照ってやつは、便利ですがやっかいでもあるものですね。
スクリプトを書く機会を得たので、意気揚々と書いてました。当初は長くても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という変数にデータコピーされるため、破壊的処理でも問題ないと勝手に解釈して書いてしまいました。ショックです。最近プログラムに触っていないので、プログラマ的な考えを忘れてしまっています。