我有一个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"
,是否有办法阻止迭代直到打印完成?
答案 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缓冲区,但我认为在这种情况下这是过度的。