2013-04-03 5 views
0

Я хочу заменить некоторую строку в файле и сохранить ее обратно. У меня уже есть код, который может открыть файл, найти строку и заменить ее. Но файл не сохраняется. Что с этим не так?Замените некоторую строку в файле и сохраните ее

open MYINPUTFILE, $EventLog; 
my @lines = <MYINPUTFILE>; # read file into 
my @errors =(); 
my $size = $#lines + 1; 
for ($i = 0; $i < $size; $i++) { 
    if ($lines[$i] =~ m/$s1(.*)$s2/) { 
     $lines[$i] =~ s/$s1(.*)$s2/$s1.($1+4).$s2/eg; 
     print $lines[$i] ; 
    } 
} 
close MYINPUTFILE; 

ответ

1

Ваш скрипт открыл файл в режиме чтения и распечатался на STDOUT. Вам нужно открыть второй временный файл, записать на него измененный вывод. И, наконец, удалите первый файл и переименуйте временный файл в качестве вашего окончательного файла.

Кроме того, я хотел бы сделать это:

Заменить дескрипторы файлов:

open my $input_file, '<', $EventLog or die $!; 

Не читать весь файл в массив (это плохая идея для больших файлов). Прочитайте строку за строкой и обработайте ее должным образом:

while(my $line = <$input_file>) { 
    #... 
} 
Смежные вопросы