如何让ActivePerl与cygwin的屏幕很好地配合?

时间:2010-01-22 21:13:11

标签: windows perl windows-xp cygwin

我想使用cygwin工具(屏幕)进行开发,并从cygwin环境调用ActiveState Perl调试器会引发以下错误。

bash-3.2$ perl -d test.pl
The system cannot find the path specified.
Unable to get Terminal Size. The Win32 GetConsoleScreenBufferInfo call didn't work. The COLUMNS and LINES environment variables didn't work. The resiz
e program didn't work. at F:/Perl/lib/Term/ReadKey.pm line 362.
Compilation failed in require at F:/Perl/lib/Term/ReadLine/Perl.pm line 64.
 at F:/Perl/lib/Term/ReadLine/Perl.pm line 64
        Term::ReadLine::Perl::new('Term::ReadLine', 'perldb', 'GLOB(0x18e2e0c)', 'GLOB(0x1883e14)') called at F:/Perl/lib/perl5db.pl line 6073
        DB::setterm called at F:/Perl/lib/perl5db.pl line 2237
        DB::DB called at testReliance1.pl line 2
Attempt to reload Term/ReadLine/readline.pm aborted.
Compilation failed in require at F:/Perl/lib/Term/ReadLine/Perl.pm line 64.
END failed--call queue aborted at testReliance1.pl line 64.
 at testReliance1.pl line 64
bash-3.2$

我找不到任何解决方法。
尝试使用cygwin perl distrubution,但是在cpan下编译perl模块对我来说是噩梦,因为他们中的大多数都不会编译,也没有深入的知识来修复编译器错误。

为调试器提供虚假终端可能有效,但不知道可行性和如何进行 请建议是否有解决方法。

5 个答案:

答案 0 :(得分:1)

来自"Environment" section of the Term::ReadLine documentation

  

环境变量PERL_RL控制加载哪个ReadLine克隆。如果值为false,则使用虚拟接口。

作为解决方法直到解决不兼容问题,您可以使用

禁用Term :: ReadLine
bash$ PERL_RL=0 perl -d test.pl

答案 1 :(得分:1)

请记住,Windows控制台为常规* nix控制台提供了一个非常不同的环境。通常,想要与控制台交互的Windows应用程序在Cygwin控制台(如MinTTY,XTerm,Screen)中不起作用,因为它们只提供PTY仿真。

MinTTY的作者Andy Koppe编写了a small program called conin来允许Windows程序从控制台读取,但仍然认为完全输出支持是不可行的。

答案 2 :(得分:1)

在我看来,好像你有很多问题。 ActiveState Perl尝试将Perl移植到具有二进制分发和模块版本控制的Windows,这种方法正在消亡。 strawberry perl的成功以及我的个人经历让我觉得你只是在使用错误的产品。

我专门使用草莓,一方面我可以指望自从迁移以来遇到的问题。从ActiveState转换后我感到非常高兴。我建议你也试一试。 Strawberry带有一个mingw环境 - 它甚至可以为您编译XS模块,它可以让您获得纯粹的CPAN。

(这是一个完全失败的答案,但我很确定我在cygwin中使用过strawbery perl的bin并且它已经有效了)

解决方案 - 使用Cygwins术语ReadKey

基本上,你只需要将Cygwin Term::ReadKey放在你的lib pecking顺序中更高的位置,以便它被使用。

  1. 创建目录D:\ foo_lib
  2. 将术语Term / ReadKey目录从cygwins / usr / lib / perl复制到D:\ foo_lib
  3. 将术语/ ReadKey.pm复制到D:\ foo_lib \ Term \
  4. 在您的环境中将PERL5LIB =“D:\ foo_lib”添加到StrawBerry perl。


  5. 从Cygwin运行它。

    perl -MTerm::ReadKey -E"say Term::ReadKey::termsizeoptions()"
    

    无论那个值是什么,从你的草莓安装中编辑Term / ReadKey.pm手工破解它,设置一个变量

    1. my $termoption = value_you_got from above
    2. 使用&termsizeoptions()
    3. 替换$termoption

答案 3 :(得分:0)

在运行Perl之前尝试运行此命令:

export COLUMNS LINES

答案 4 :(得分:0)

使用与ActiveState perl一起打包的wperl.exe。这往往可以正常工作。