gpt4 book ai didi

perl - 从STDIN读取时,while vs foreach

转载 作者:行者123 更新时间:2023-12-04 13:20:50 25 4
gpt4 key购买 nike

这个问题已经在这里有了答案:




9年前关闭。




Possible Duplicate:
What's the difference between iterating over a file with foreach or while in Perl?



In the while loop, Perl reads a line of input, puts it into a variable, and runs the body of the loop. Then, it goes back to find another line of input. But in the foreach loop, the line-input operator is being used in a list context (since foreach needs a list to iterate through). So it has to read all of the input before the loop can start running. That difference will become apparent when the input is coming from your 400 MB web server logfile! It's generally best to use code like the while loop's shortcut, which will process input a line at a time, whenever possible. Source-The Llama book



所以我应该每次都使用 while吗? foreach循环将在一段时间内占主导地位的可能情况是什么?

最佳答案

如您所指出的那样,在循环开始之前,使用foreach遍历文件会将该文件插入内存。

虽然Perl的信念之一确实是“做事不止一种”,但存在做事的方法比其他方法没有真正的好处。 foreach可能不是循环遍历文件的替代方法。如果要逐行遍历文件,通常使用while()。如果要一次将整个文件保存到内存中,则只需一步就可以完成。

有时,对整个文件进行细化处理具有一些优势。例如,其中之一就是最大程度地缩短了必须打开文件的时间。通常,它是为了方便处理不符合行或记录模型的数据。 foreach()吸收文件,但实际上并没有给它立即关闭文件的好机会,因此,这种好处已荡然无存。如果必须将数据视为大块,则使用foreach循环遍历文件不会对您有多大帮助。因此,这个理由也消失了。最后,您得到了文件拖曳的负面效果,而没有文件拖曳的正面效果。

总会有人提出一个别人没有考虑的聪明理由。但是我还没有看到。 (通常,当我说某人张贴“它”之类的东西时,建议它绝对没有优点总是很危险的。)让我们这样说:直到您发现使用foreach遍历a的极少数很好的理由之一。文件,不用担心。当然,当您进行该发现时,您会知道该是时候了。

关于perl - 从STDIN读取时,while vs foreach ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com