【发布时间】:2015-06-24 22:06:27
【问题描述】:
我在就地文件编辑时遇到了问题,我浏览了几个小时没有结果。
我真的不想使用通用的临时文件方案,即将所有内容写入新文件并替换旧文件。我需要修改时间戳以反映实际更改、权限和所有权保持不变等。
如果我理解正确,使用 $I^ 只是临时文件方案的简写 - 还是我错了?
“+
到目前为止我的测试代码:
#!/usr/bin/perl
use strict;
use warnings;
open(FILE, "+<", "testingfile") or die "$!";
while (<FILE>) {
print;
s/world/WORLD/;
print FILE $_;
print;
}
“testingfile”有三行,我现在只想将“world”替换为“WORLD”:
hello
world
foo
结果
当我运行 Perl 脚本时,会产生垃圾并且终端一直挂起直到被中断 (Ctrl+C):
hello
hello
foo
foo
o
o
llo
llo
ÈÈ'>jËNgs}>¾ØKeh%P8* * + + p+ ÑÑÀ+ + p+ p+ ¨° #!/u8in/puse ct;
ÈÈ'>jËNgs}>¾ØKeh%P8* * + + p+ ÑÑÀ+ + p+ p+ ¨° #!/u8in/puse ct;
“测试文件”现在包含:
hello
world
foo
hello
hello
foo
我在 SunOS (Solaris) 生产系统上运行旧的 Perl:
This is perl, v5.8.4 built for i86pc-solaris-64int
【问题讨论】:
-
您将在现实中做出什么样的改变?将
world更改为WORLD很简单,因为两个字符串的长度相同。如果您想将数据附加到文件末尾,那么这很简单,但如果您想缩短或 - 更糟糕的是 - 延长文件末尾之前的行,那么它变得更加困难