perl – 当我使用睡眠时,为什么不在循环的每个迭代上打印任何内容?

前端之家收集整理的这篇文章主要介绍了perl – 当我使用睡眠时,为什么不在循环的每个迭代上打印任何内容?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
今天在我大学里老师问我一个问题。他在纸上写了这段代码,并说
“这段代码输出是什么?”
use warnings;

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

我发现它很容易,并说它将循环20次,并且在每次迭代它将打印一个点(。),因此总共20个点将是输出

他说你是对的,然后在代码中做了一些修改代码是:

use warnings;

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

他说现在的产量是什么?我不知道睡眠功能,我猜想在每次迭代时会打印点(。),然后等待1秒(因为睡眠功能),然后再次迭代,然后再次打印(。)然后它会等待1秒钟等等…

老师告诉我在家检查。我在家里试过,我知道第二个代码等待了20秒,然后一次打印所有的点(20点)。我想知道这是怎么回事?为什么每次迭代都不会打印点(。)?

解决方法

真正的问题与睡眠无关,而是…………

你是Suffering from Buffering.提供的链接让你从1998年的“Perl Journal”出自Marc Jason Dominus(高级Perl的作者)的一篇很好的文章。这篇文章可能已经十多年了,但是这个话题与他写的时候一样有关。

其他人解释了$ | = 1;技术。我会补充说,在Perl社区的主要思想中,似乎是$ | = 1优于$ |只是因为它的意思更清楚。我知道,自动增量也是非常简单的,但是当应用或 – (而不是在perlvar中查找)时,每个将会看到你的代码的人都知道$ |的行为。我也喜欢本地化Perl的“特殊变量”的任何修改,使得效果不会被清理成其他部分的代码,可能不会很好地对默认的Perl行为进行特定更改。所以就这样,我会把它写成:

use strict;
use warnings;

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

猜你在找的Perl相关文章