一个关于 $. 在foreach while的简单问题

大狗狗
一个关于 $. 在foreach while的简单问题

程序如下

#!/usr/local/bin/perl -w
open FILE,"001.pl";
#while(<FILE>){
foreach(<FILE>){
                print "$.  $_";
                }
close FILE;


foreach 打印的时候 $. 一直是一个固定的总行数,

while中 $. 却是 从1 --->总行数

很奇怪为什么会是这样,

先鄙视自己一下, 我google  foreach $.的时候被google转义了,

churchmice
那是
while是一行一行读进来的,读一次,$.加一下
但是foreach是一起读进来的,所以$.始终是一

luckyelement
while 是按照行读的.
foreach 是数组方式.

这应该是区别吧.

大狗狗
[quote]原帖由 [i]churchmice[/i] 于 2008-5-9 16:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8350502&ptid=1095263][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
那是
while是一行一行读进来的,读一次,$.加一下
但是foreach是一起读进来的,所以$.始终是一 [/quote]



谢谢,原来是我自己理解的错误。 那么
foreach $file (<FILE>){print "$file/n";print $.}  

这个不是每次也读一行吗?

sorry 我可能钻牛角尖了,不过我分析大日志的时候一直貌似都是这样用的,好像以前不知道在那里看过说while(<>)  @lines=<FILE>  都是一次读入所有。。

foreach $_ (<>) {print $_} 好像应该是一次一行阿。。。

churchmice

我再看看
不过
foreach 右边提供的是一个list环境,所以是一次读入,在文件很大的时候要避免
while右边提供的是一个scalar环境,所以一次读一行(一行的定义和$/有关),可以处理任意大小的文件

大狗狗
[quote]原帖由 [i]luckyelement[/i] 于 2008-5-9 16:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8350563&ptid=1095263][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
while 是按照行读的.
foreach 是数组方式.

这应该是区别吧. [/quote]


@lines=<FILE>;
while(@lines){}
foreach(@lines){}

你的上面的说法好像在perl 入门里面我暂时没有找到,  while 和foreach 应该只是把文件作为一个大的数组,每次读入按照顺序读入数组中的一个。

大狗狗
[quote]原帖由 [i]churchmice[/i] 于 2008-5-9 16:18 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8350646&ptid=1095263][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

我再看看
不过
foreach 右边提供的是一个list环境,所以是一次读入,在文件很大的时候要避免
while右边提供的是一个scalar环境,所以一次读一行(一行的定义和$/有关),可以处理任意大小的文件 [/quote]


foreach  VAR (LIST) BLOCK

while (EXPR) BLOCK

这个是书中的定义。 貌似你的话让我明白了,不过好像更加糊涂了, 可能是我还没有搞清楚 scalar环境 代表什么把,

churchmice
实验了下
自己的理解没有错
你foreach (<$file_handle>)里面的$.最后的line number
说明是一起读入的
$.在读入每一行的时候自动加,所以你如果用foreach的话,因为是一次性读入,所以$.已经变成了末尾行的line number

churchmice
[quote]原帖由 [i]大狗狗[/i] 于 2008-5-9 16:25 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8350727&ptid=1095263][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]



foreach  VAR (LIST) BLOCK

while (EXPR) BLOCK

这个是书中的定义。 貌似你的话让我明白了,不过好像更加糊涂了, 可能是我还没有搞清楚 scalar环境 代表什么把, [/quote]
见本版第一页有个精华贴
mlist上一位大叔对上下文的定义

大狗狗
[quote]原帖由 [i]churchmice[/i] 于 2008-5-9 16:28 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8350772&ptid=1095263][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

见本版第一页有个精华贴
mlist上一位大叔对上下文的定义 [/quote]


可耻的问一句,可以给一个地址吗?

第一页没有精华贴,精华贴的地一页我正在看。

churchmice
[quote]原帖由 [i]大狗狗[/i] 于 2008-5-9 16:36 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8350861&ptid=1095263][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]



可耻的问一句,可以给一个地址吗?

第一页没有精华贴,精华贴的地一页我正在看。 [/quote]
我错了
不是精华贴
[url]http://bbs.chinaunix.net/thread-907104-1-1.html[/url]

luckyelement
foreach (<handle>) {
# Not as expected
.......
}
while(<handle>){
# Works as expected
........
}

或者 perldoc perlsyn

大狗狗
谢谢楼上各位,重新理解context这个概念了,