免费注册 查看新帖 |

Chinaunix

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

一个关于 $. 在foreach while的简单问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-09 16:02 |只看该作者 |倒序浏览
程序如下

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


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

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

很奇怪为什么会是这样,

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

论坛徽章:
0
2 [报告]
发表于 2008-05-09 16:06 |只看该作者
那是
while是一行一行读进来的,读一次,$.加一下
但是foreach是一起读进来的,所以$.始终是一

论坛徽章:
0
3 [报告]
发表于 2008-05-09 16:11 |只看该作者
while 是按照行读的.
foreach 是数组方式.

这应该是区别吧.

论坛徽章:
0
4 [报告]
发表于 2008-05-09 16:16 |只看该作者
原帖由 churchmice 于 2008-5-9 16:06 发表
那是
while是一行一行读进来的,读一次,$.加一下
但是foreach是一起读进来的,所以$.始终是一




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

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

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

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

论坛徽章:
0
5 [报告]
发表于 2008-05-09 16:18 |只看该作者

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

论坛徽章:
0
6 [报告]
发表于 2008-05-09 16:19 |只看该作者
原帖由 luckyelement 于 2008-5-9 16:11 发表
while 是按照行读的.
foreach 是数组方式.

这应该是区别吧.



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

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

论坛徽章:
0
7 [报告]
发表于 2008-05-09 16:25 |只看该作者
原帖由 churchmice 于 2008-5-9 16:18 发表

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



foreach  VAR (LIST) BLOCK

while (EXPR) BLOCK

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

论坛徽章:
0
8 [报告]
发表于 2008-05-09 16:28 |只看该作者
实验了下
自己的理解没有错
你foreach (<$file_handle>)里面的$.最后的line number
说明是一起读入的
$.在读入每一行的时候自动加,所以你如果用foreach的话,因为是一次性读入,所以$.已经变成了末尾行的line number

论坛徽章:
0
9 [报告]
发表于 2008-05-09 16:28 |只看该作者
原帖由 大狗狗 于 2008-5-9 16:25 发表



foreach  VAR (LIST) BLOCK

while (EXPR) BLOCK

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

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

论坛徽章:
0
10 [报告]
发表于 2008-05-09 16:36 |只看该作者
原帖由 churchmice 于 2008-5-9 16:28 发表

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



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

第一页没有精华贴,精华贴的地一页我正在看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP