免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3048 | 回复: 17
打印 上一主题 下一主题

新手求助,关于更新文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-09 09:57 |只看该作者 |倒序浏览
如何去利用内置变量&^I更新文件?
我的代码如下
open(my $file_handle , "update_test.txt" or die "Can not open the  file!";#这里我到底应该使用什么样的模式来操作文件?
chomp(my $date = localtime);
$^I =".bak";#这个内置变量的用法到底应该怎么使用
while(<$file_handle>{
s/^Author:.*/Author: Randal L. Scharwartz/;
s/^Phone:.*\n//;
s/^Date:.*/Date: $date/;
print;
}
########################
书上说
“啊,我看到了发生的改变。Perl 修改我的文件fred03.dat,做了我希望的修改,
并将早期的文件保存在叫做fred03.dat.bak 的文件之中”但我们知道的真相是:Perl 不会修改任何文件。它新建了一份修改
后的拷贝,说“Abracadabra(咒语)”,当在魔术棒出现过闪光后,文件就被交换了。很狡猾吧!
意思我明白,但是到底是怎么工作的啊,help me~!

论坛徽章:
0
2 [报告]
发表于 2010-11-09 09:59 |只看该作者
人工置顶一下:wink:

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2010-11-09 10:54 |只看该作者
楼主难道是要这个?
  1. perl -i.bak -pe "s/^Author:.*/Author: Randal L. Scharwartz/;s/^Phone:.*\n//;s/^Date:.*/Date: $date/;" testfile
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2010-11-09 11:02 |只看该作者
  1. -i[extension]
  2. specifies that files processed by the <> construct are to be edited in-place. It does this by renaming the input file, opening the output file by the original name, and selecting that output file as the default for print() statements. The extension, if supplied, is used to modify the name of the old file to make a backup copy,
复制代码
perldoc perlrun

论坛徽章:
0
5 [报告]
发表于 2010-11-09 11:04 |只看该作者
回复 3# zhlong8

这是命令行的形式吧,我主要问题是没弄明白这个内置变量如何使用和工作的,谢谢你.

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2010-11-09 11:09 |只看该作者
回复 5# Bruceh2010


    上面文档说的很清楚,只对 <> 这个 magic 才起作用

论坛徽章:
0
7 [报告]
发表于 2010-11-09 11:13 |只看该作者
回复  Bruceh2010


    上面文档说的很清楚,只对  这个 magic 才起作用
zhlong8 发表于 2010-11-09 11:09

我明白了,<>里是不能有参数的对么

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2010-11-09 11:18 |只看该作者
只能用默认值,至少文档是这个意思。目前就找到 perlrun 中的 -i 和 perlvar 中的 $^I 看这两个地方应该是不能在里面加参数了。

论坛徽章:
0
9 [报告]
发表于 2010-11-09 11:19 |只看该作者
本帖最后由 Bruceh2010 于 2010-11-09 11:20 编辑

看到了网上有人说使用tie模块来操作文件,我试了一下文件更新成功.
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Tie::File;
  4. =pod
  5. 使用tie 模块来处理文件修改问题
  6. =cut
  7. my @lines;
  8. my $filename="update_test.txt";#指定要操作的文件
  9. my $date = localtime;
  10. tie(@lines ,'Tie::File',$filename) or die $!;
  11. foreach my $i (@lines){
  12.     if($i =~ /\n/){#这里匹配不上.
  13.         print "got it";
  14.     }
  15.     $i =~ s/Phone.*//;
  16.     $i =~s/^Author:.*/Author: Randal L. Scharwartz/;
  17.     $i =~s/^Date:.*/Date: $date/;
  18.     print "$i\n";
  19. }
  20. untie(@lines);
复制代码
但是我发现一个问题,为什么我匹配不上换行呢?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
10 [报告]
发表于 2010-11-09 11:21 |只看该作者
本帖最后由 zhlong8 于 2010-11-09 11:28 编辑

回复 9# Bruceh2010

tie 背后为你做了很多小动作你才能像数组一样使用文件。

\n 应该可以匹配得上的啊,你检查下是不是别的地方有错?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP