在打印完成之前,Perl for循环继续

时间:2014-07-08 11:19:58

标签: perl for-loop printf

我有一个for循环,它从用户获取一个值并进行比较并根据输入打印结果。但是,下一次迭代在前一个if中的if打印出输入解释结果之前启动其print语句:

for $count (0 .. $group_count) {
    my $group_name = groups[$count];
    my $answer = prompt "\nWould you like to add $user to group $group_name? [y/n]";
    if($answer eq 'y') {
        print "successful";
    }
}

因此,一旦我在提示后按Enter键,下一个"Would you like to add ..."出现,然后打印"successful",是否有办法阻止迭代直到打印完成?

1 个答案:

答案 0 :(得分:2)

由于您没有回复,我将不得不猜测您的问题是什么。我的猜测是你看到的东西:

Would you like to add foo to group A? [y/n]
$ y
# nothing happens
successful
Would you like to add bar to group B? [y/n]

这是因为print在打印时使用缓冲。当您打印不包含换行符\n的内容时,它只会添加到缓冲区中,但不会立即打印。所以,如果你想看到它打印,只需添加换行符:

print "Successful\n";

从技术上讲,你也可以通过$|篡改stdout缓冲区,但我认为在这种情况下这是过度的。