2009-07-31 4 views
1

私はModule :: Buildの新機能ですので、何か問題があったかもしれません。ディスパッチを「テスト」から「テストカバー」に変更すると警告を受けるのは私だけですか? Devel :: Coverにバグはありますか? Module :: Buildにバグはありますか?私はたぶん何か間違ったことをしましたModule :: Buildのtestcoverで「初期化されていない値の使用」警告が表示されるのはなぜですか?

私は、Module :: Build version 0.31012とDevel :: Cover 0.64のActiveState Perl v5.10.0を使用しています.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. 
+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をチェックして、私のAS 5.10でインストールされたバージョンは、バージョン0.83であるのに対し、それはバージョン0.89です。

一時的な対策として、AS Perlに付属のDeparse.pmをバックアップして、それが現在のバージョンと置き換えて違いがあるかどうかを確認できますか?

+1

'$ kid'はノーオペレーションかもしれないが、私はそれらがフラグを得るとは思わない。それはマイナーなバグのように聞こえます。 –

+0

@ブラッドありがとう。私は内部についてはよく分かりませんが、あなたが言うことは理にかなっています。 –

+0

私はそれほど実際には分かりませんが、オプティマイザがno-opsの後ろに残すことはわかります。 –

0

Bの著者::逆パースは、彼は、次のワンライナーでエラーを再現することができたことを私に電子メールで送信:

% 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の指導者の誰かがこのボールを持って走りたいのですか?

+2

perlbugはhttp://bugs.perl.org/です。バグは修正されています:http://rt.perl.org/rt3/Ticket/Display.html?id=71870 – daxim

関連する問題