2009-07-31 4 views
1

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

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

UPDATE: Я обновлен до модуля :: 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. 
+1

Похоже, что это может быть ошибка в 'B :: Deparse'. –

+0

Я обновил B :: Deparse только сейчас, и предупреждение переместилось на другой номер строки, но это указывает на тот же вызов в этом модуле, что и раньше. –

+0

Я отправил по электронной почте автора B :: Deparse. Нам нужно посмотреть, что произойдет. –

ответ

2

Линия 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 

Примечание: Я только что проверил repository version of B::Deparse и это в версии 0.89, тогда как версия, установленная с моей AS Perl 5.10 версия 0,83.

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

+1

'$ kid' может быть не-op, я не думаю, что те получают флаги. Если это звучит как незначительная ошибка. –

+0

@ Брад спасибо. Я не очень разбираюсь в внутренностях, но то, что вы говорите, имеет смысл. –

+0

На самом деле, я этого не знаю, но я знаю, что оптимизатор оставит без-ops. –

0

Автор 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. Я не знаю, о чем он говорит. Надеюсь, это не упадет. Кто-нибудь из вас, Гуру Перла, который читает это, хочет взять этот мяч и бежать с ним?

+2

perlbug - http://bugs.perl.org/. Исправлена ​​ошибка: http://rt.perl.org/rt3/Ticket/Display.html?id=71870 – daxim

 Смежные вопросы

  • Нет связанных вопросов^_^