曲径通幽论坛

标题: 备份文件变量($^I) [打印本页]

作者: beyes    时间: 2011-10-5 18:13
标题: 备份文件变量($^I)
$^I 操作符可以在修改原文件的时先进行备份,其备份方式按照 $^I 给出的字符串作为备份文件的后缀名。

先假设下面有 temp1.txt 到 temp6.txt 六个文本文件,其中每个文件中都有一句话,且每句话中含有一个单词 Jasmine 。下面程序将一次性更新 6 个文件中的单词 Jasmine 为 JASMINE ,与此同时需要将原文见备份并命名为 temp1.txt.bak, temp2.txt.bak 等。

考虑下面代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl -w

$^I = ".bak";

while (<>) {
        s/Jasmine/JASMINE/;
        print;
}


运行后:
# ls
temp1.txt      temp2.txt.bak  temp4.txt      temp5.txt.bak
temp1.txt.bak  temp3.txt      temp4.txt.bak  temp6.txt
mmodify.pl  temp2.txt      temp3.txt.bak  temp5.txt      temp6.txt.bak
随便查看其中之一一个文件:
# cat temp2.txt
JASMINE is a girl
说明:
$^I 的默认值是 undef。在程序中给它复制了一个字符串 ".bak" ,所以在更新原来文件并备份时,各个备份文件都会用 ".bak" 作为备份文件的后缀名。如果将 $^I 设为空字符串,那么就会直接修改文件的内容,而不会留下任何备份。也正是因为有了 $^I ,在 while 中的 print 的输出才会重定向到由钻石操作符 <> 打开的文件中,否则 print 的输出在省略了句柄的情况下,它操作的默认句柄是“标准输出”。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2