Почему в тестовой оболочке Module :: Build отображаются предупреждения об использовании неинициализированных значений? - PullRequest
1 голос
/ 31 июля 2009

Я немного новичок в Module :: Build, так что, возможно, я сделал что-то не так. Я единственный, кто получает предупреждения, когда я изменяю свою отправку с «test» на «testcover»? Есть ли ошибка в Devel :: Cover? Есть ли ошибка в Module :: Build? Я, наверное, просто сделал что-то не так.

Я использую ActiveState Perl v5.10.0 с Module :: Build версии 0.31012 и Devel :: Cover 0.64 и Eclipse 3.4.1 с EPIC 0.6.34 для моей IDE.

ОБНОВЛЕНИЕ: Я обновился до Module :: Build 0.34, и предупреждения все еще выводятся.

ОБНОВЛЕНИЕ: похоже на ошибку в B :: Deparse. Надеюсь, это когда-нибудь исправят.

Вот мой файл сборки модульного теста:

use strict;
use warnings;
use Module::Build;

my $build = Module::Build->resume (
  properties => {
    config_dir => '_build',
  },
);

$build->dispatch('test');

Когда я запускаю этот файл сборки модульного теста, я получаю следующий вывод:

t\MyLib1.......ok 
t\MyLib2.......ok 
t\MyLib3.......ok 
All tests successful. 
Files=3, Tests=24,  0 wallclock secs ( 0.00 cusr +  0.00 csys =  0.00 CPU)

Но когда я изменяю строку отправки на «testcover», я получаю следующий вывод, который всегда включает в себя кучу «использования неинициализированного значения в побитовых и» предупреждающих сообщениях:

Deleting database D:/Documents and Settings/<username>/My Documents/<SNIP>/cover_db
t\MyLib1.......ok
Use of uninitialized value in bitwise and (&) at D:/Perl/lib/B/Deparse.pm line 4252.
Use of uninitialized value in bitwise and (&) at D:/Perl/lib/B/Deparse.pm line 4252.
t\MyLib2.......ok
Use of uninitialized value in bitwise and (&) at D:/Perl/lib/B/Deparse.pm line 4252.
Use of uninitialized value in bitwise and (&) at D:/Perl/lib/B/Deparse.pm line 4252.
t\MyLib3.......ok
Use of uninitialized value in bitwise and (&) at D:/Perl/lib/B/Deparse.pm line 4252.
Use of uninitialized value in bitwise and (&) at D:/Perl/lib/B/Deparse.pm line 4252.
All tests successful.
Files=3, Tests=24,  0 wallclock secs ( 0.00 cusr +  0.00 csys =  0.00 CPU)
Reading database from D:/Documents and Settings/<username>/My Documents/<SNIP>/cover_db

---------------------------- ------ ------ ------ ------ ------ ------ ------
File                           stmt   bran   cond    sub    pod   time  total
---------------------------- ------ ------ ------ ------ ------ ------ ------
.../lib/ActivePerl/Config.pm    0.0    0.0    0.0    0.0    0.0    n/a    0.0
...l/lib/ActiveState/Path.pm    0.0    0.0    0.0    0.0  100.0    n/a    4.8
<SNIP>
blib/lib/<SNIP>/MyLib2.pm     100.0   90.0    n/a  100.0  100.0    0.0   98.5
blib/lib/<SNIP>/MyLib3.pm     100.0   90.9  100.0  100.0  100.0    0.6   98.0
Total                          14.4    6.7    3.8   18.3   20.0  100.0   11.6
---------------------------- ------ ------ ------ ------ ------ ------ ------

Writing HTML output to D:/Documents and Settings/<username>/My Documents/<SNIP>/cover_db/coverage.html ...
done.

Ответы [ 2 ]

2 голосов
/ 31 июля 2009

Строка 4252:

$kid = $op->first;
if ( $kid->flags & OPf_SPECIAL # Line 4252
 and ( $] < 5.009 ? $kid->pmflags & PMf_SKIPWHITE()
      : $kid->reflags & RXf_SKIPWHITE() ) ) {
$exprs[0] = "' '";
}

так что, похоже, это связано с тем, что $kid->flags по какой-то причине не определено.

Что вы получите, если сделаете

perl -MO=Deparse,-d -e my_test_script

Примечание: Я только что проверил версию репозитория B :: Deparse , и она имеет версию 0.89, тогда как версия, установленная с моим AS Perl 5.10, - версия 0.83.

В качестве временной меры, можете ли вы сделать резервную копию Deparse.pm, поставляемую с AS Perl, и заменить ее текущей версией, чтобы увидеть, имеет ли это значение?

0 голосов
/ 23 ноября 2009

Автор B :: Deparse написал мне по электронной почте, что он смог воспроизвести ошибку со следующей однострочной:

% perl -MO=Deparse -we '$r = qr/foo/; my @a = split($r, $_)' 
BEGIN { $^W = 1; }
$r = qr/foo/;
Use of uninitialized value in bitwise and (&) at /usr/lib/perl/5.10/B/Deparse.pm line 4250.
my(@a) = split(/$r/, $_, 0);
-e syntax OK

Затем он попросил меня переслать ошибку в perlbug. Я не знаю, о чем он говорит. Я надеюсь, что это не упало. Кто-нибудь из вас, Perl-гуру, который читает это, хочет взять этот мяч и бежать с ним?

...