Я пытаюсь редактировать файл cfg внутри внутри perl-скрипта, но он не работает, если я прочитал ввод данных до этого. Вот тестовый сценарий, чтобы воссоздать проблему, которую я вижу.Почему не работает perl inplace, если я читаю пользовательский ввод до этого?
#!/usr/bin/perl -w
use strict;
my $TRACE_CFG = "trace.cfg";
print "Continue [y/N]> ";
my $continue = <>;
{
local $^I = '.bak';
local @ARGV = ($TRACE_CFG);
while (<>) {
s/search/replace/;
print;
}
unlink("$TRACE_CFG.bak");
}
Редактирование работает, если я закомментировать "мои $ продолжить = <>;" линия. Если я прочитаю ввод пользователя, похоже, что настройка @ARGV для файла trace.cfg не вступает в силу, а цикл while ожидает ввода от STDIN. Я могу обойти это, используя sed или используя временный файл и переименовав его, но я хотел бы знать причину такого поведения и правильный способ сделать это.
Я никогда не осознавал этого. «Аккуратный». – ikegami