加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:17:54 所属栏目:大数据 来源:网络整理
导读:今天在我大学里老师问我一个问题。他在纸上写了这段代码,并说 “这段代码的输出是什么?” use warnings;for (1 .. 20){ print ".";} 我发现它很容易,并说它将循环20次,并且在每次迭代它将打印一个点(。),因此总共20个点将是输出。 他说你是对的,然后在
今天在我大学里老师问我一个问题。他在纸上写了这段代码,并说
“这段代码的输出是什么?”
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;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读