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

时间:2012-11-11 16:08:17

标签: perl 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/;
}

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

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

$term->addhistory($cmd) if $cmd !~ /\S||\n/;

它起作用所以我继续前进,直到Tanktalus在我发布的另一个问题中提出这个问题。 Perl Term::ReadLine::Gnu 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

1 个答案:

答案 0 :(得分:5)

/\S||\n/将始终匹配,因此您永远不会调用addhistory。如果$term->Features->{autohistory}为真,那么无论如何都不需要。

通过“向上箭头两次”,你的意思是你每两个箭头向上移动历史一次吗?如果是这样,你对addhistory的不必要的召唤就是罪魁祸首。只需完全删除呼叫即可。