perl程序执行流程,望指教![已解决]

perl程序执行流程,望指教![已解决]

aaa.txt内容如下:

QUOTE:
AAAcgegaegaagegeKKK
ttttttttttttttt
UUUUUUUUUUUU
BBBBBBBBBBBBBB
HHHHZZZddddddd

目的:了解程序运行顺序。
CODE:

QUOTE:
#!/usr/bin/perl
use strict;
open(FH,"<aaa.txt") or die "$!";
my ($one,$two);
while (<FH>){                #while[1]
  $one=$. if /AA/;
  $two=$. if /BB/;
}
while (<FH>){                #while[2]
  print if(1..4);
}
close FH;

请问:执行该程序后,为何没有任何显示,也没有报错。单独使用while[2]是可行的。while[1]运行完毕后才运行while[2]吧?因为偶没有程序基础,对程序执行顺序不熟悉,上面问题出在哪里呢?谢谢!

while[1]之后FH的内部指针已经到了EOF while[2]是不会执行的 要重新回到文件开头需移动FH的内部指针


QUOTE:
原帖由 kinpoo 于 2008-1-22 15:01 发表
while[1]之后FH的内部指针已经到了EOF while[2]是不会执行的 要重新回到文件开头需移动FH的内部指针

兄弟好快
内部指针?EOF?小弟没有程序基础,该拿点什么东东补习下?
C里面的fseek应该比较熟悉吧
http://perldoc.perl.org/functions/seek.html


QUOTE:
原帖由 kinpoo 于 2008-1-22 15:05 发表
C里面的fseek应该比较熟悉吧
http://perldoc.perl.org/functions/seek.html

偶没有程序基础。我尽量看这个E文链接吧先,谢谢kinpoo兄指教!
通俗的说,
就是你第一个while循环结束的时候指针已经指到文件的结尾了,也就是读不出东西了
所以第二个循环什么也显示不出来

另外你第一个循环里要做的事情$one=$. if /AA/;  #  $. 是不是想写成$_


QUOTE:
原帖由 CU_wanglijun 于 2008-1-22 15:14 发表
通俗的说,
就是你第一个while循环结束的时候指针已经指到文件的结尾了,也就是读不出东西了
所以第二个循环什么也显示不出来

另外你第一个循环里要做的事情$one=$. if /AA/;  #  $. 是不是想写成$_

对指针没有概念。
$.只是取匹配到行的行号,并将它赋值给一个变量,不是取匹配的行。

QUOTE:
第一个while循环结束的时候指针已经指到文件的结尾了

如何看出来的?

注:该程序什么都不做,只是偶学习执行顺序随意弄出来的。



QUOTE:
#!/usr/bin/perl
use strict;
open(FH,"<aaa.txt") or die "$!";
my ($one,$two);
while (<FH>){                #while[1]
  $one=$. if /AA/;
  $two=$. if /BB/;
}
seek (FH,0,0);
while (<FH>){                #while[2]
  print if(1..4);
}
close FH;

我如上修改了程序(加了条seek语句),依然无法得到结果。大家帮看看啊,谢谢!

print if(1..4);
恕我愚昧...这行请问你是要干嘛???
1..4是个array....这跟true or false无关吧...
应该是
print if ($.>=1 && $.<=4);
才对吧..


QUOTE:
while (<FH>){                #while[2]
  print if(1..4);
}

这个,打印FH中第一至四行.单独这样写这个while可以的.加了seek语句也不能将前后两个while连起来么?