У меня возникли проблемы с редактированием файлов на месте, поскольку я безрезультатно просматривал веб-страницы в течение нескольких часов.
Я действительно не хочу использовать общую схему временных файлов, т.е. записывать все в новый файл и заменять старый. Мне нужны временные метки модификации, чтобы отражать фактические изменения, разрешения и права собственности, чтобы они оставались неизменными и т. д.
Если я правильно понимаю, использование $I^
- это просто сокращение для схемы временного файла - или я ошибаюсь?
Режим "+‹" должен открывать файл как для чтения, так и для записи.
Мой тестовый код на данный момент:
#!/usr/bin/perl
use strict;
use warnings;
open(FILE, "+<", "testingfile") or die "$!";
while (<FILE>) {
print;
s/world/WORLD/;
print FILE $_;
print;
}
«Тестовый файл» состоит из трех строк, и я просто хочу заменить «мир» на «МИР»:
hello
world
foo
Результат
Когда я запускаю сценарий Perl, создается мусор, и терминал остается висящим до тех пор, пока его не прервут (Ctrl+C):
hello
hello
foo
foo
o
o
llo
llo
ÈÈ'>jËNgs}>¾ØKeh%P8* * + + p+ ÑÑÀ+ + p+ p+ ¨° #!/u8in/puse ct;
ÈÈ'>jËNgs}>¾ØKeh%P8* * + + p+ ÑÑÀ+ + p+ p+ ¨° #!/u8in/puse ct;
"testingfile" теперь содержит:
hello
world
foo
hello
hello
foo
Я запускаю старый Perl в производственной системе SunOS (Solaris):
This is perl, v5.8.4 built for i86pc-solaris-64int
world
наWORLD
просто, потому что две строки имеют одинаковую длину. Если вы хотите добавить данные в конец файла, то это просто, но если вы хотите укоротить или, что еще хуже, удлинить строки перед концом файла, то это становится намного сложнее. - person Borodin   schedule 24.06.2015