曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3391|回复: 0
打印 上一主题 下一主题

备份文件变量($^I)

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-10-5 18:13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
$^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 的输出在省略了句柄的情况下,它操作的默认句柄是“标准输出”。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 13:39 , Processed in 0.077116 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表