Perlプログラムの中でファイルの一部を書き換える方法

Perlプログラムの中でファイルの一部を書き換える方法

Posted at August 6,2015 1:55 AM
Tag:[Perl]

Perlプログラムの中でファイルの一部を書き換える方法を紹介します。

1.はじめに

Perlでファイルの一部を書き換えるには、コマンドラインからのワンライナーで実行すれば一発です。

perl -pe 's/foo/bar/g' *.txt

参考:Perlのワンライナーで複数ファイルの文字列を一括置換する方法

が、Perlプログラムの中でワンライナーと同じようにファイルの一部を簡単に書き換える方法が分かりません。

ちなみにsystem関数やバッククォートでワンライナーを実行すると、

Can't do inplace edit without backup.

というエラーが表示されます。

2.プログラムの中でファイルの一部を書き換える

プログラムの中でファイルの一部を書き換えるには、次のような方法があります。

open my $fh1, $file;
my $content = do { local $/; <$fh1> };
close $fh1;
 
$content =~ s/foo/bar/g;
 
open my $fh2, "> $file";
print $fh2 $content;
close $fh2;

単純にファイルの内容を変数$contentに保持し、一括置換したあと同じファイルに上書きするというものです。

これはひとつのアイデアなので、よりシンプルに書ける方法があるかもしれません。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)