Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Почему не происходит замены в файле?


Автор: trinitr0 25.6.2013, 16:15
Пытаюсь написать скрипт который за менял бы в одну фразу на другую.
 
Код:

Код

#!/use/bin/perl -w

use strict;

open(OF, "+< /var/www/d-link/conf")

    while(<OF>)
    {
        chomp;
        $_ = "create account admin sa";
        $_ =~ s/sa/*/g;
        print OF $_;
    }
close(OF);


После выполнения #perl ./var/www/d-link/conf ошибок на консоли нет, а в конец файла conf добавляются "*" и никакой замены не происходит . Помогите пожалуйста! Третий день мучаюсь!  :dash1

Автор: DProf 25.6.2013, 16:44
разделите чтение и запись. А то вот строкой print OF $_ Вы куда пишете попробуйте себе объяснить. В какую строку файла? Вывод буферизируется и поэтому ваши "*" только в конце и пишутся. Но даже если буфер отключить ($| = 1) то это Вам не поможет. Делайте так например.  
Код

open(OLD, "<", $old_file) or die $!;
open(NEW, ">", $new_temp_file) or die $!; 
while(<OLD>)
{
    s/sa/*/g;
    print NEW $_;
}

close(NEW);
close(OLD);

#copy new to old:
rename $old_file, "$old_file.backup";
rename $new_temp_file, $old_file;


Над чем тут три дня мучиться? :-)

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51c9988f6ccc190b0c000002#findElement_E7045_51c99ebe6ccc19cf0d00d67e_0

Автор: trinitr0 25.6.2013, 17:13
Спасибо ОГРОМНОЕ! Поправил по вышем рекомендациям и всё стало так как надо! Спасибо за разъеснение, теперь стало всё понятно. Спасибо!  smile 
И ещё  в конец добавил:

Код
 unlink $old_file.backup; 



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)