我正在使用 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/;
}
为了进行测试,我将输入一些“命令”,然后尝试使用向上箭头检索这些命令。我按向上箭头一次,最后一个项目立即出现,但在检索每个后续项目之前,我需要按向上箭头两次。
我早些时候在我正在进行的一个小项目中遇到了这个问题,并且遇到了遇到同样问题的人。此问题的解决方案是对 addhistory 行进行如下修改:
$term->addhistory($cmd) if $cmd !~ /\S||\n/;
它起作用了,所以我继续前进,直到 Tanktalus 在我发布的另一个问题中提出了这个问题。Perl 术语::ReadLine::Gnu 信号处理困难 https://stackoverflow.com/questions/13316232/perl-termreadlinegnu-signal-handling-difficulties
他问“/\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
/\S||\n/
将始终匹配,因此您永远不会调用 addhistory。如果$term->Features->{autohistory}
是的,无论如何你都不需要。
“点击向上箭头两次”是指每两个向上箭头就在历史记录中向上移动一次吗?如果是这样,那么罪魁祸首就是你对 addhistory 不必要的调用。完全删除该调用就是适当的修复方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)