使用Perlbrew安装perl-5.20.1。 perl5db.t中的测试失败

时间:2015-02-10 13:35:42

标签: perl perlbrew

我正在尝试使用Perlbrew安装Perl v5.20.1,但由于脚本perl5db.t中的测试失败而失败。我使用的是64位架构的Ubuntu 14.04(x86_64)。

运行:

$ perlbrew install perl-5.20.1

开始安装正常并运行几分钟,但由于测试失败而中止。输出:

Test Summary Report
-------------------
../lib/perl5db.t                                                (Wstat: 0 Tests: 119 Failed: 86)
  Failed tests:  19-56, 58-60, 63-64, 66, 68-72, 74, 76-80
                82-83, 85-101, 104-108, 110, 112, 114, 116-119
Files=2409, Tests=699745, 550 wallclock secs (34.45 usr  3.70 sys + 264.29 cusr 27.76 csys = 330.20 CPU)
Result: FAIL

~/perl5/perlbrew/build.perl-5.20.1.log我可以看到第一次失败的测试是:

# Failed test 19 - Can set breakpoint in a line in the middle of the file. at ../lib/perl5db.t line 555
#      got 'In MyModule.
# In Main File.
# '
# expected /(?^msx:
#         ^Var=Bar$
#             .*
#         ^In\ MyModule\.$
#             .*
#         ^In\ Main\ File\.$
#             .*
#         )/

更新

我想我发现了导致问题的更多细节。我通过调试构建目录中的测试脚本/home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db.t来跟踪问题。

脚本perl5db.t是用于测试Perl调试器是否正常工作的脚本。第一次失败的测试发生在它测试是否可以在文件中间的一行上设置断点时。文件/home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db/t/filename-line-breakpoint如下所示:

use strict;
use warnings;

use MyModule;

my $x = "Foo";

MyModule::function();

print "In Main File.\n";

并且包含的​​模块MyModule.pm是:

package MyModule;

use strict;
use warnings;

use vars qw($var);

$var = "Bar";

sub function
{
    print "In MyModule.\n";
}

1;

然后,测试脚本使用-d开关在脚本上运行Perl,并将以下命令运行到调试器:

b ../lib/perl5db/t/MyModule.pm:12
c
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }
c
q

它希望调试器的输出类似(即:匹配):

qr/
        ^Var=Bar$
            .*
        ^In\ MyModule\.$
            .*
        ^In\ Main\ File\.$
            .*
        /msx

但它得到了:

In MyModule.
In Main File.

哪个不匹配。

问题很可能就是问题
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }

命令,根本不产生任何输出..

1 个答案:

答案 0 :(得分:1)

此问题很可能是由于perl5db.t中的bug导致环境变量PERLDB_OPTS为空。但对于我的情况,它不是空的,但设置为NonStop导致测试脚本出现故障。