相关疑难解决方法(0)

刷新Perl STDIN缓冲区

有没有办法清除Perl中的STDIN缓冲区?我的程序的一部分有很长的输出(有足够的时间让某人输入几个字符)并在输出之后我要求输入,但是如果在输出期间输入了字符,它们将被"添加"到输入中输入的任何内容部分.这是我的问题的一个例子:

for(my $n = 0; $n < 70000; $n++){
   print $n . "\n";
}
chomp(my $input = <STDIN>);
print $input . "\n";
Run Code Online (Sandbox Code Playgroud)

输出将包括从for循环输出期间输入的任何字符.我怎么能禁用STDIN或刷新STDIN缓冲区(或任何其他方式不允许额外的字符在调用之前插入STDIN)?

perl buffer stdin flush

10
推荐指数
1
解决办法
6947
查看次数

Term :: ReadLine - 我需要两次点击向上箭头来检索历史记录

我正在使用Term :: ReadLine并且有一个奇怪的问题,我需要两次点击向上箭头来从addhistory中检索项目.这是我正在使用的脚本.

use Term::ReadLine;

my $term = Term::ReadLine->new('Term1');
print $term->ReadLine."\n";

while (defined(my $cmd = $term->readline())) {
    $term->addhistory($cmd) if $cmd =~ /\S/;
}
Run Code Online (Sandbox Code Playgroud)

为了测试,我将输入一些"命令",然后尝试使用向上箭头检索这些命令.我点击向上箭头,最后一个项目立即出现,但我需要在检索到每个后续项目之前按两次向上箭头.

我之前在一个正在研究的小项目中遇到过这个问题,遇到了同样问题的人.该问题的解决方案是对addhistory行的修改如下:

$term->addhistory($cmd) if $cmd !~ /\S||\n/;
Run Code Online (Sandbox Code Playgroud)

它起作用所以我继续前进,直到Tanktalus在我发布的另一个问题中提出这个问题.Perl Term :: ReadLine :: Gnu信号处理的难点

他问"什么是/\S || \n /应该做什么?".好吧,让我去找那个暗示这个作为修复的页面......是的......找不到它.因此,虽然我可以使用我发布的修改工作,但是因为A我有点卡住了.我不知道它为什么修复它,而B.为什么我似乎是唯一一个有这个问题的人?

任何帮助或建议将不胜感激!:)

使用以下版本测试上述脚本:

Perl - 5.12.4 and 5.16.1
Term::ReadLine::Gnu - 1.20
Term::ReadLine::Perl - 1.0303 (Just tried it to make sure it wasn't Gnu)
Term::ReadLine - 1.10
Run Code Online (Sandbox Code Playgroud)

perl readline

2
推荐指数
1
解决办法
546
查看次数

标签 统计

perl ×2

buffer ×1

flush ×1

readline ×1

stdin ×1