gpt4 book ai didi

perl - 当我使用 sleep 时,为什么在循环的每次迭代中不打印输出任何内容?

转载 作者:行者123 更新时间:2023-12-03 15:07:32 24 4
gpt4 key购买 nike

今天在我的大学里,一位老师问了我一个问题。他把这段代码写在纸上说
“这段代码的输出是什么?”

use warnings;

for (1 .. 20)
{
print ".";
}

我发现这很容易,并说它会循环 20 次,每次迭代时它会打印一个点 (.),因此总共输出 20 个点。

他说你是对的,然后他对代码进行了一些更改。代码是:
use warnings;

for (1 .. 20)
{
print ".";
sleep 1;
}

他说现在的输出是什么?我不知道 sleep 函数,我猜在每次迭代时它会打印点 (.) 然后它会等待 1 秒(因为 sleep 函数)然后它会再次迭代然后再次它会打印 (.) 然后它会等待 1 秒等等......

老师叫我回家查一下。我在家里试过,我知道第二个代码等待 20 秒,然后一次打印所有点(20 点)。我想知道这是怎么发生的?为什么点 (.) 没有在每次迭代中打印?

最佳答案

真正的问题与sleep无关,而是那个…………

您是 Suffering from Buffering .提供的链接将您带到 Marc Jason Dominus(高阶 Perl 的作者)发表于 1998 年左右的 Perl 期刊上的一篇优秀文章。这篇文章可能已经有十多年的历史了,但这个话题在今天和他写这篇文章时一样重要。

其他人已经解释了$| = 1;技术。我要补充那些评论,在 Perl 社区的主要思想中似乎是 $| = 1优于 $|++只是因为它的含义更清楚。我知道,自动增量也很简单,但是每个看过你代码的人都知道 $| ++ 时的行为或 --已应用(无需在 perlvar 中查找)。我碰巧也更喜欢本地化 Perl 的“特殊变量”的任何修改,这样效果就不会渗透到代码的其他部分中,这些部分在对默认 Perl 行为进行特定更改时可能不会很好地发挥作用。既然如此,我会把它写成:

use strict;
use warnings;

{
local $| = 1;
for ( 1 .. 20 ) {
print '.';
sleep 1;
}
}

关于perl - 当我使用 sleep 时,为什么在循环的每次迭代中不打印输出任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6558634/

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