【问题标题】:How can I do inplace editing (-i) with perl on windows?如何在 Windows 上使用 perl 进行就地编辑(-i)?
【发布时间】:2012-03-28 13:22:36
【问题描述】:

在 unix/linux 版本中,我只需更改第一行:

#!perl -i.bak

在 Windows 上使用 Activestate perl,我已经创建了与 .pl 的关联,我可以直接从命令行运行 perl 脚本。

myScript.pl

如果我仍想使用默认关联,如何就地编辑文件?

【问题讨论】:

    标签: windows perl inplace-editing


    【解决方案1】:

    听起来像是一个诡计的问题,我想知道我是否理解正确。

    perl -pi.bak myScript.pl myfiletochange
    

    只需调用 perl,提供开关和脚本名称,然后就可以开始了。

    现在,您可能不想提供这些额外的参数。如果是这样,您可以简单地设置the variable $^I,这将激活就地编辑。例如:

    $^I = ".bak"; # will set backup extension
    

    【讨论】:

    • 没有技巧 - 为非技术用户创建脚本,并希望它独立。谢谢。
    • @chris 您的非技术用户应该知道,当脚本保存备份时,该备份会在源文件上每次后续使用脚本时被覆盖。
    • 他们都说这是一次性的。 :)
    • @chris 这只是一次,直到下一次。 =P
    【解决方案2】:

    由于您将使用脚本,您可能想要执行以下操作:

    sub edit_in_place
    {
        my $file       = shift;
        my $code       = shift;
        {
            local @ARGV = ($file);
            local $^I   = '';
            while (<>) {
                &$code;
            }
        }
    }
    
    edit_in_place $file, sub {
        s/search/replace/;
        print;
    };
    

    如果您想创建备份,请将 local $^I = ''; 更改为 local $^I = '.bak';

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多