while (defined($_ = ))
{
print “I saw $_”;
}
在列表context 中使用行输入操作时,则会将所有的行(剩下的)当作一个列表,而每一行作为列表的一个元素:
foreach()
{
print “I saw $_”;
}
同样,行输入操作和Perl 的默认变量$_没有必然的联系。在上例中,foreach 默认的控制变量为$_。因此,此循环将每一行
赋给$_。
上面的看起来相似:好像有理由认为它们的行为也是相似的,不是吗?
它们在底层是很不相同的。在while 循环中,Perl 读入一行,将它赋给变量,然后进入循环。再回到开头,读入下一行。但
在foreach 循环中,由于行输入操作在列表的context 中使用,因为foreach 需要一个列表作为其参数。因此,它在循环执行
前会将所有的输入读入。这种区别在读入一个400MB 的web 服务器的log 文件时非常明显。通常使用while 循环是一种更
好的方法,因为它一次处理一行输入。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11517198/viewspace-594793/
,如需转载,请注明出处,否则将追究法律责任。