加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如果我在此之前读取用户输入,为什么perl inplace编辑工作?

发布时间:2020-12-15 23:24:20 所属栏目:大数据 来源:网络整理
导读:我正在尝试在perl脚本内部编辑cfg文件,但是如果我在此之前读取用户输入则它不起作用.这是一个测试脚本,用于重现我看到的问题. #!/usr/bin/perl -wuse strict;my $TRACE_CFG = "trace.cfg";print "Continue [y/N] ";my $continue = ;{ local $^I = '.bak'; lo
我正在尝试在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 =<&gt ;;”,则编辑有效.线.如果我确实读取了用户输入,看起来设置@ARGV到trace.cfg文件没有生效,而while循环等待来自STDIN的输入.我可以通过使用sed或使用临时文件并重命名来解决这个问题,但我想知道这种行为的原因以及执行此操作的正确方法.

解决方法

尝试,

my $continue = <STDIN>;

代替

my $continue = <>;

as<>有魔法打开 – 文件句柄,以后不会看@ARGV中的内容,因此不处理你的文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读