I am trying to install Perl v5.20.1 with Perlbrew, but it fails due to failed tests in a script perl5db.t
. I am using Ubuntu 14.04 with 64 bit architecture (x86_64).
Running:
$ perlbrew install perl-5.20.1
started installation fine and run for some minutes, but then aborted due to failed tests. Output:
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
From ~/perl5/perlbrew/build.perl-5.20.1.log
I can see that the first failed test is:
# 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\.$ # .* # )/
Update
I think I found more details about what causes the problem. I traced the problem by debugging the test script /home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db.t
in the build directory.
The script perl5db.t
is a script to test that the Perl debugger is working. The first failed test occurs when it tests if it can set a breakpoint on a line in the middle of a file. The file /home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db/t/filename-line-breakpoint
looks like:
use strict; use warnings; use MyModule; my $x = "Foo"; MyModule::function(); print "In Main File.\n";
and the included module MyModule.pm
is:
package MyModule; use strict; use warnings; use vars qw($var); $var = "Bar"; sub function { print "In MyModule.\n"; } 1;
The test script then runs Perl on the script using the -d
switch and the following commands to the debugger:
b ../lib/perl5db/t/MyModule.pm:12 c do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; } c q
It expects the output from the debugger to be like (that is: matching) :
qr/ ^Var=Bar$ .* ^In\ MyModule\.$ .* ^In\ Main\ File\.$ .* /msx
But it gets:
In MyModule. In Main File.
which does not match. So the problem is likely to be the
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }
command, which does not produce any output at all..