读取 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
放到主循环中。
我已经为儿童演示制作了一个小的 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
放到主循环中。