读取 STDIN ("Press enter to reset") 的 perl 子例程仅在第一次有效

perl subroutine from reading STDIN ("Press enter to reset") only works the first time

我已经为儿童演示制作了一个小的 perl 程序,我试图通过 clear 子例程保持屏幕简洁,但它只在第一次工作,然后就没有响应了输入,只清除屏幕,我不知道为什么。我也确信通常有一种更简单的方法可以做到这一点,所以也许整个事情都应该被废弃。

有一个来自 STDIN 的查询提示,然后一旦它检查了数据库,它就会调用 restart 子程序。

我有:

while (my $seq = <STDIN>){
  chomp($seq);
  if (exists $references{$seq}){
    ... blah blah blah
    sleep(2);
    &restart;
  }else{
    print "\nOops! This  doesn't exist!\n";
    sleep(2);
    &restart;
  }
}
sub restart {
  print "\nPress Enter to restart\n";
  while (my $in = <STDIN>){
   if($in eq "\n"){
     system("clear");
     print $prompt;
   }
  }
}

感谢观看!

sub restart 中,您又在 <STDIN> 上循环。这将继续循环,而不 return 进入主循环,直到 STDIN 收到 EOF。您可以在 print $prompt; 到 return 之后将 return 放到主循环中。