わたなべです。

Koji Arai <JCA02266 / nifty.ne.jp> writes:

> この手作業を自動的に行いたい場合は -i オプションを使用します。
> (上のスクリプトが hoge.rb だとすると)
> 
> ruby -i hoge.rb 対象のファイル...
> 
> のように実行すると画面出力の内容を元ファイルに勝手に上書きし
> てくれます。(-i では、ファイルを複数同時に指定できます)
> 
> ruby -i.bak hoge.rb 対象のファイル...
> 
> のように -i に続けて拡張子を指定すれば元のファイルをバックアッ
> プしてくれます。

-iの場合
 1) 対象ファイルを"r"でopenする(fr)
 2) 対象ファイルをunlinkする
 3) 対象ファイルを"w"でopenする(fw)
 4) frから読んで、なにか処理し、fwに書き込む
という処理になっているので、Windowsでは禁止してます。
  % ruby -i -pe0 foo.txt
  -e:1: Can't do inplace edit without backup (fatal)
というわけで-iの後ろには必ず拡張子をつけてください。

たぶんunlinkじゃなくてrenameすればいいんですが、rename後のファ
イル名が存在してる場合等を考えると、指定してもらったほうが楽
というか、ぶっちゃけPerlがそうなっていたからRubyもこうなってます。

-- 
わたなべひろふみ