【问题标题】:Perl debugger does not work with arrow keys under PerlbrewPerl 调试器不适用于 Perlbrew 下的箭头键
【发布时间】:2016-07-18 19:09:09
【问题描述】:

我希望箭头键用于 perl 调试器中的命令历史记录。 This solution 看起来不错,所以我用的是ubuntu,所以我尝试了

sudo aptitude install libterm-readline-gnu-perl

但是,我仍然在 perl 调试器中得到回显 ^[[A^[[B 而不是上一个/下一个命令。

我发现这是我的perlbrew 环境中的一个特别问题。如果我运行 /usr/bin/perl -d 箭头键 do 工作(即,安装仅针对该 perl 修复它)。

如何让调试器在 perlbrew 下工作?

作为最后的努力,在我的 perlbrew 环境中,我尝试了cpanm Term::ReadLine::Gnu,但得到了错误

找不到 libtermcap.a、libncurses.a 或 libcurses。

我可以开始安装更多的库,但感觉好像我错过了其他东西,因为它只是影响 Perlbrew 的一个问题。

【问题讨论】:

  • 你没有错过“其他东西”。它只会影响 perlbrew,因为您的 perlbrew perl 没有安装 Term::Readline::Gnu。
  • 好的,是的(确认安装在/usr/lib/perl5下,来自libterm-readline-gnu-perl)。但是为什么在 perlbrew 下会出现 cpanm 错误呢?即,为什么它在/usr/bin/perl -d没有安装这些库的情况下工作?
  • $Config{libpath} 中找不到库时会引发该错误。运行perl -MConfig -le'print $Config{libpth}' 以查看正在搜索哪些目录。要么安装了库,但你的 perlbrew perl 正在查找错误的目录,要么没有安装库,但它们在 libterm-readline-gnu-perl 中静态链接。
  • 啊 - 我没想到静态链接。一定是这样; find 不返回任何库名称的结果。 perlbrew $Config{libpath} 搜索 /usr/bin/perl 目录的超集。
  • 它只适用于您的系统 Perl,因为您只为您的系统 Perl 安装了模块。

标签: perl arrow-keys perlbrew perldb


【解决方案1】:

通过您的发行版的软件包系统安装的 Perl 模块仅在您的发行版的 perl 中可用(即/usr/bin/perl)。其他 perl 安装(例如那些由 perlbrew 管理的)不受影响。这就是为什么其他 perls 看不到 Term::ReadLine::Gnu。

从 perlbrew 环境中安装 Term::ReadLine::Gnu(例如通过 cpan 或 cpanm)是正确的解决方案。您遇到的错误可能是由于缺少开发标头(Term::ReadLine::Gnu 是 readline C 库的包装器,因此需要构建标头)。尝试安装ncurses-dev(有能力),然后再次运行cpanm

【讨论】:

  • 依赖地狱:rlver.c:3:31: fatal error: readline/readline.h: No such file or directory 但这就是为什么我想先确保我没有错过其他东西 :-)
【解决方案2】:

安装@melpomene 建议的软件包确实可以解决问题。

但我发现了另一个需要开发包的解决方案(因此,不需要root)。 以下任何一个 CPAN 包都可以单独使用:

  • Term::ReadLine::Perl(Readline 库的 Perl 实现)
  • Term::Readline::Zoid(PureReadline 库的 Perl 实现)

由于 Perlbrew 有时(经常?)在您没有 root 的环境中使用,这可能是一个更方便的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2012-11-26
    相关资源
    最近更新 更多