Это ограничение Windows / MS-DOS. Согласно perldiag :
Вы находитесь в системе, такой как MS-DOS, которая запутывается, если вы пытаетесь читать из удаленного (но все еще открытого) файла. Вы должны сказать -i.bak, или что-то подобное.
Реализация -i
в Perl заставляет его удалить file1.txt
, сохраняя открытый дескриптор, а затем заново создать файл с тем же именем. Это позволяет вам «прочитать» файл file1.txt, даже если он был удален и создается заново. К сожалению, Windows / MS-DOS не позволяет вам удалить файл, к которому прикреплен открытый дескриптор, поэтому этот механизм не работает.
Лучше всего использовать -i.bak
, а затем удалить файл резервной копии. Это, по крайней мере, дает вам некоторую защиту - например, вы можете отказаться от удаления резервной копии, если perl
завершается с ненулевым кодом выхода. Что-то вроде:
perl -i.bak -ape "splice...." file1.txt && del file1.bak