Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48684
  • 博文数量: 19
  • 博客积分: 1504
  • 博客等级: 上尉
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-06 14:21
个人简介

系统运维

文章分类
文章存档

2013年(6)

2011年(2)

2009年(4)

2008年(7)

我的朋友

分类: PERL

2013-05-26 21:01:44


点击(此处)折叠或打开

  1. use strict;

  2. open(FH,") or die "$!";
  3. my ($one,$two);
  4. while (<FH>){ #while[1]
  5.   $one=$. if /AA/;
  6.   $two=$. if /BB/;
  7. }
  8. print "$one", "$two";

  9. seek (FH,0,0); #关键

  10. $.=0; #关键

  11. while (<FH>){ #while[2]
  12.   print if(1..4); #打印FH文件的第1至4行,     #语句1
  13. #等同于($.>=1 && $.<=4)。《大骆驼》中说到。
  14. }

  15. close FH;
解析:
1)假如没有seek行,则while[2]不会执行。当第1个while执行完毕后,文件指针已指向的尾部,不会再执行while[2]。为解决这个问题,利用seek。
2)删除"$n.=0;"这行代码,然后将语句1改成 "print $." ,检查$.的结果。你会发现"$."并非从"1"开始递增!因为使用seek后,while[2]中的$.延续while[1]中的$.递增。若要使while[2]的$.从"1"开始变化,加上一句"$.=0;"就OK了。
3)seek用法详见  
   seek FILEHANDLE,POSITION,WHENCE
   FILEHANDLE 文件句柄
   POSITION 移动的字节数,正数向后移动,负数往回移动
   WHENCE 值可为0或1或2。The values for WHENCE are 0 to set the new position in bytes to POSITION; 1 to set it to the current position plus POSITION; and 2 to set it to EOF plus POSITION, typically negative. 
4)延伸:tell函数返回文件句柄的当前位置,如上面tell(FH);
阅读(3158) | 评论(0) | 转发(0) |
0

上一篇:《Learnning Perl》一例(high-water mask算法)

下一篇:没有了

给主人留下些什么吧!~~