Windows 我如何让ActivePerl与cygwin';谁的屏幕?

Windows 我如何让ActivePerl与cygwin';谁的屏幕?,windows,perl,windows-xp,cygwin,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 var

我想使用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发行版,但在cpan下编译perl模块对我来说是一场噩梦,因为大多数模块都不会编译,也没有修复编译器错误的深入知识

为调试器提供一个假终端可能会起作用,但不知道可行性和如何进行。

请建议是否有任何解决方法。

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

export COLUMNS LINES
从:

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

在解决不兼容问题之前,您可以使用禁用Term::ReadLine

bash$ PERL_RL=0 perl -d test.pl
bash$PERL_RL=0 PERL-d test.pl请记住,Windows控制台提供了与常规*nix控制台完全不同的环境。通常,希望与控制台交互的Windows应用程序在Cygwin控制台(如MinTTY、XTerm、Screen)中无法工作,因为它们只提供PTY仿真


Andy Koppe是的作者,他写了一篇文章,允许windows程序像从控制台一样读取,但是完全的输出支持仍然被认为是不可行的。

在我看来,您似乎遇到了很多问题。ActiveState Perl是一种尝试,它将Perl移植到windows,对模块进行二进制分发和版本控制,这种方法正在消亡。我个人的成功经验让我觉得你只是用错了产品

我只使用草莓,而且从迁移以来我经历的问题数量可以从一方面统计。我很高兴从ActiveState转换过来。我建议你也试试看。草莓附带了一个mingw环境——它甚至可以为您编译XS模块,它为您打开了一个纯CPAN的大门

(这是一个完全不合常规的答案,但我相当肯定我在cygwin中使用了strawbery perl的bin,并且它已经起作用了)

解决方案-使用Cygwins术语ReadKey 本质上,您只需要Cygwin
术语::ReadKey
在lib排序中处于较高的位置,就可以使用它了

  • 创建一个目录D:\foo\u lib
  • 将term/ReadKey目录从cygwins/usr/lib/perl复制到D:\foo\u lib
  • 将Term/ReadKey.pm复制到D:\foo\u lib\Term\
  • 将PERL5LIB=“D:\foo\u lib”预先添加到您的环境中,以获得草莓perl

  • 或。


    运行这个,从Cygwin

    perl -MTerm::ReadKey -E"say Term::ReadKey::termsizeoptions()"
    
    不管该值是什么,从草莓安装中编辑Term/ReadKey.pm,并在其中手工修改,设置一个变量

  • my$termoption=您从上面获得的价值
  • &termsizeoptions()
    替换为
    $termoption

  • 使用与ActiveState perl打包的wperl.exe。这会正常工作。

    Chris,您好,我尝试过导出列,现在调用调试器的行只是挂起而没有调试器提示。bash-3.2$export COLUMNS=80 bash-3.2$export line=24 bash-3.2$perl-d testReliance1.plIn在这种情况下,听起来ActiveState perl与Screen(或者通常是Cygwin ptys)不兼容:-(请尝试CPAN::Reporter自动报告CPAN模块的错误。与其使用问题进行回复,不如尝试使用注释或编辑您的问题进行回复——这样,答案列表不会被污染,我们可以看到您正在回复的答案。谢谢Andrew。使用注释进行回复的问题是,我们无法设置格式。)nd强制执行600个字符的限制。我真的希望该功能在“添加注释”中具有格式设置。现在,我将编辑问题以添加注释。禁用TERM::ReadLine也不起作用,因为它只是挂起而没有调试器提示。更奇怪的是,它在cgywin中的bash shell上工作正常,但无法从bash shell在屏幕内运行。因此,GNU屏幕环境可能是导致问题的原因。它似乎工作正常如果bashshell是从DOS提示符(cmd.exe)启动的,但它不能从cygwin shell中运行,那就好了