迅维网

查看: 2900|回复: 1
打印 上一主题 下一主题

请高手帮忙解释下命令 头大了 关于Perl的命令!!my @tmp = split(/\s/,$_);

[复制链接]
跳转到指定楼层
1#
发表于 2009-8-11 11:18:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 广东中山 来自 广东中山

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
my @tmp = split(/\s/,$_);

2#
发表于 2009-8-11 11:45:57 | 只看该作者 来自: 广东中山 来自 广东中山
有时还不希望结束循环,但本次循环已经结束。这种情况下,next 是非常适用的。它跳到当前循环块的最后面(块内)◆。
next 之后,又会进入下一轮循环(这和C 或者类似语言的“continue”相似):
◆我们这里又撒了一个小谎。事实上,next 跳到循环的conttinue(通常省略)块的开头处。参见perlsyn 了解详细的信息。
#分析输入文件的单词
while(<>){
foreach(split){ #将$_分拆成单词,并依次赋给$_
$total++;
next if/\W/; #不是“words”的被跳过
Perl 语言入门(第四版)
blei@163.com 132 / 201 9/21/2006
$valid++;
$count{$_}++; #对每个单词进行计数
##next 跳到这里##
}
}
print “total things = $total, valid words = $valid\n”;
foreach $word (sort keys %count){
print “$word was seen $count{$word} time.\n”;
}
这几乎是到目前为止所出现过的最复杂例子,让我们一步一步地分析它。while 循环从尖括号输入符(<>)中读入,一行接一
行的,每次都读入$_中;你以前已经见过了。循环每次执行时,这一行均被读入$_ 中。
在循环体中,foreach 循环在split 的返回值上进行迭代操作。你还记得没有参数的split 的默认参数是什么吗◆?是$_,分
隔符时空白(whitespace),它将$_分拆成一串单词。由于foreach 循环没有提到其它的控制变量,那么它为默认的$_。因此,
这些单词依次赋给$_。
◆如果不记得了,也不用担心。不要花费精力在能在perldoc 能查到的东西上。
但,我们刚才不是说过,$_存储的是一行值吗?是的,在外部循环中,这是正确的。但在foreach 循环内部,它存放的是单
词。Perl 能处理$_的不同用法,这种事经常发生。
现在,在foreach 循环内部,$_一次含有一个单词。$total 值依次增加,它统计单词的总数。接着一行(本例重点)检查是
否有nonword 字符:存在字符,数字,下划线之外的符号。因此如果它是Tom’s;或者含有逗号,引号,其它的特殊字符,
则会匹配上此模式,从而跳过循环的后部分,处理下一个单词。
但如果是一个普通的单词,如fred,$valid 值增1,同时$count{$_}也会增1,每一个单词均会被计数。当这两重循环结束
时,我们就把用户感兴趣的文件中的所有单词进行了统计。
我们不打算解释后面几行。我们希望你现在已经能解决它们了。
last, next 可以在这5 种循环中使用:for, foreach, while, until, 或者“裸”块。如果块是嵌套的,next 在最里层工作。在本节
结束处你能了解到怎样改变它。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复