Inplace-Edit
えー、null filehandle を使うときは素直に inplace-edit を使えばいいんじゃないでしょうか。
$^I = ""; # or $INPLACE_EDIT = ""; while (<>) { s/foo/bar/; print; }
ここでは$^Iを空文字にしてるけど、適当な文字列を入れれば、バックアップファイルの suffix として使われる。
null filehandle を使えない場合は、File::Inplace を使うとか。使ったことないけど。
use File::Inplace; my $editor = File::Inplace->new(file => 'foo.txt') while (my ($line) = $editor->next_line) { $line =~ s/foo/bar/; $editor->replace_line($line); } $editor->commit;
まぁ、この例ぐらいだとワンライナーの方が速いというオチもあるけど。
% perl -pi -e 's/foo/bar/' foo.txt