我正在尝试在 perl 脚本中就地编辑 cfg 文件,但如果我在此之前读取用户输入,它将不起作用。这是一个重新创建我看到的问题的测试脚本。
#!/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");
}
如果我注释掉“my $continue = <>;”,则编辑有效 线。如果我确实读取了用户输入,看起来将@ARGV 设置为 trace.cfg 文件不会生效,并且 while 循环等待来自 STDIN 的输入。我可以通过使用 sed 或使用临时文件并重命名它来解决这个问题,但我想知道这种行为的原因以及执行此操作的正确方法。