Perl 在Windows上实时编辑当前脚本
我想在Windows上实时编辑当前脚本的源代码 下面的脚本在OSX上编辑自己,将每行填充到_DATA________________________________Perl 在Windows上实时编辑当前脚本,perl,Perl,我想在Windows上实时编辑当前脚本的源代码 下面的脚本在OSX上编辑自己,将每行填充到_DATA________________________________ use strict; use warnings; use open IO => ':raw'; # Convert every line of source file to 64 characters long { local @ARGV = $0; local $^I = '.bak'; w
use strict;
use warnings;
use open IO => ':raw';
# Convert every line of source file to 64 characters long
{
local @ARGV = $0;
local $^I = '.bak';
while (<>) {
if ( 1 .. /^__DATA__/ ) {
s{(\h*#*)(?=\R|\z)}{
(' ' x (63 - length($_) + length($1))) . '#'
}e;
}
print;
}
unlink "$0$^I"; # Delete backup
}
__DATA__
Hello World
这只是一个概念证明,但有没有办法在Windows上实时编辑当前脚本的源代码?在Windows上使用?无法删除或重命名打开的文件,除非该文件是使用允许此操作的标志打开的(
文件共享\u删除
)。Perl在打开文件时不使用该标志。当您到达
时,它尝试将$0
重命名为$0.bak
,但失败了,因为Perl仍将文件作为数据打开。添加close(数据)代码>超出了该错误范围(并导致错误处理行尾)。听起来像是windows文件权限问题。。。该脚本是一个“正在使用的文件”,因此不能由其他内容编辑。。。除非草莓Perl有“以读/写模式运行脚本”的标志,否则添加关闭数据代码>修复了该问题。但是没有错误处理行尾,因为我希望length
报告:raw
而不是:crlf
值。在我使用的(?=\R |$)
脚本的早期版本中,在CR和LF之间放置空格和
会产生垃圾,但在调试另一个bug时简化了正则表达式。如果我重现你所说的内容,我将进行一些测试并编辑我的问题,我怀疑我现在会这样做。键入file.pl
是我注意到问题的方式。最终我能够将windows笔记本电脑从壁橱中取出并确认。修正了使用原始正则表达式的问题。
use strict; #
use warnings; #
#
use open IO => ':raw'; #
#
# Convert every line of source file to 64 characters long #
{ #
local @ARGV = $0; #
local $^I = '.bak'; #
while (<>) { #
if ( 1 .. /^__DATA__/ ) { #
s{(\h*#*)(?=\R|\z)}{ #
(' ' x (63 - length($_) + length($1))) . '#' #
}e; #
} #
print; #
} #
unlink "$0$^I"; # Delete backup #
} #
#
__DATA__ #
Hello World
Can't do inplace edit on selfedit.pl: File exists at selfedit.pl line 10.