【发布时间】:2012-03-28 13:22:36
【问题描述】:
在 unix/linux 版本中,我只需更改第一行:
#!perl -i.bak
在 Windows 上使用 Activestate perl,我已经创建了与 .pl 的关联,我可以直接从命令行运行 perl 脚本。
myScript.pl
如果我仍想使用默认关联,如何就地编辑文件?
【问题讨论】:
标签: windows perl inplace-editing
在 unix/linux 版本中,我只需更改第一行:
#!perl -i.bak
在 Windows 上使用 Activestate perl,我已经创建了与 .pl 的关联,我可以直接从命令行运行 perl 脚本。
myScript.pl
如果我仍想使用默认关联,如何就地编辑文件?
【问题讨论】:
标签: windows perl inplace-editing
听起来像是一个诡计的问题,我想知道我是否理解正确。
perl -pi.bak myScript.pl myfiletochange
只需调用 perl,提供开关和脚本名称,然后就可以开始了。
现在,您可能不想提供这些额外的参数。如果是这样,您可以简单地设置the variable $^I,这将激活就地编辑。例如:
$^I = ".bak"; # will set backup extension
【讨论】:
由于您将使用脚本,您可能想要执行以下操作:
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';
【讨论】: