2012-11-09 24 views
8

this bug için bir test yazmaya çalışıyorum. Bugüne kadar bir çözüm buldum; Anlayamadığım şey, testlerimin yayınlanmadan önce hatayı yakalamamasıydı.Neden yükleme işlemi yükleniyor?

sorun Ver: 1.00 yazdırmak gerekiyordu zaman Ver: 0 baskı bu komut satırına aşağı kaynar:

perl -Mversion -e 'printf "Ver: %s\n", ("v1.00" =~ /v(.+)/ ? version->parse($1) : "no");' 

Ancak, -Mversion önce -MTest::More eklerseniz, o zaman Ver: 1.00 yazdırır.

Sorularım neden Test::More kodumun davranışını değiştiriyor? (Bonus puanları için neden $1 yerine "$1" hata ayıklamayı ortadan kaldırır?)

Perl 5.14.2, Test :: More 0.98 ve sürüm 0.88 kullanıyorum.

cevap

8

sürümünde eski bir değer olduğundan, sürümde bir hata var. $1 büyülü var ve arg tanımlanmış olup olmadığını kontrol etmeden önce sürüm sihir işlemek için başarısız olur. $1'dan hiç kimse okumadıysa $1 undefined olduğunu düşünür. Birisi $1'dan (örn. Test :: More) okuduysa, sürüm olarak tanımlanmış gibi görünür.

$ perl -Mversion -E' 
    "v1.00" =~ /v(.+)/ or die; 
    $x=$1 if $ARGV[0]; 
    say version->parse($1); 
' 0 
0 

$ perl -Mversion -E' 
    "v1.00" =~ /v(.+)/ or die; 
    $x=$1 if $ARGV[0]; 
    say version->parse($1); 
' 1 
1.00 

Ben bir hata rapor verdikten: Perl RT#115660

+0

Tamam, bu yüzden belirlemek için biraz zaman aldı. Lanet olsun Leon! ;) – ikegami

+0

Leon daha hızlıydı, ama cevabınızı daha iyi sevdim (+ hata raporu), bu yüzden sizinkileri kabul ediyorum. – cjm

8

sürümü buggy'dir, sihir düzgün bir şekilde alınılamaz, dolayısıyla hiçbir zaman $ 1'i doldurmaz. Önce Test :: Daha Önce Yüklerken Çalışıyorsa, Bu sadece 1

İlgili konular