ファイルを書き直す必要があります。内容を変更するには、変更されている部分を過ぎて残りのファイルが最初に保存され、次に新しい内容の後にコピーされる必要があります。 (新しいコンテンツは、置換するバイト数と同じバイト数を持つことは非常にまれですので、単一の文字を正確に上書きしない限り)。挿入すると、さらに真ん中にバイトを追加することはできません。または最初に。 >>
は、が付加されたファイルを開きます.をその後ろに追加します。
十分に小さいファイルの場合
use warnings;
use strict;
my $filename = 'file_to_prepend_to.txt';
my @lines_to_prepend = ("line 1", "line 2");
# slurp the whole file into a variable
my $filecont = do {
local $/;
open my $fh, '<', $filename or die "Can't open $filename: $!";
<$fh>;
};
# open the file for writing, to overwrite
open my $fh, '>', $filename or die "Can't open $filename: $!";
# write new contents first
for my $line (@lines_to_prepend) {
print $fh "$line\n";
}
# dump the old contents now
print $fh $filecont;
close $fh;
<>
はすべての方法最後まで読み込み、ファイル全体を文字列として返され、スカラに割り当てられるようにlocal $/
はundef
に入力レコードの区切りを設定します。ブロックdo
が完了すると、ファイルハンドルは閉じられます。 printの中に\n
があることに注意してください。改行を追加してください。あなたの行からprepepndに既にそれが削除されていれば。
非常に大きなファイルの場合は、行単位で読み込んで新しいファイルに書き出してから、元のファイルに上書きする必要があります。たとえば、コアのFile::Temp
モジュールを使用するなどして、一時ファイルの名前が既存ファイルと一致しないようにすることをお勧めします。
小さなファイルまたは非常に大きなファイルを? – zdim
小さなファイル。ありがとう。 –
これはWindowsまたはLinuxでですか? – Borodin