2014-09-30 54 views
1

好像取決於perl的版本,autodie掩蓋了一些語法錯誤。autodie傻瓜perl的語法檢查

在Perl 5.16.0:

$ perlbrew use 5.16.0 
$ perl -c check_netapp_pro/lib/Il/Nagios/test/xx.pm 
String found where operator expected at check_netapp_pro/lib/Il/Nagios/test/xx.pm line 10, near "croak "stop"" 
(Do you need to predeclare croak?) 
syntax error at check_netapp_pro/lib/Il/Nagios/test/xx.pm line 10, near "croak "stop"" 
check_netapp_pro/lib/Il/Nagios/test/xx.pm had compilation errors. 

但在5.10.1:

$ perlbrew use 5.10.1 
$ perl -c check_netapp_pro/lib/Il/Nagios/test/xx.pm 
check_netapp_pro/lib/Il/Nagios/test/xx.pm syntax OK 

模塊xx.pm是:

package Il::Nagios::Store::Attribute; 
use feature ':5.10'; 
use strict; 
use warnings; 

use autodie; 

#use Carp; 

croak "stop" if 0; 

1; 
__END__ 

混亂的部分是在某些服務器上(例如CentOS 6.5,perl 5.10.1)不存在use Carp;停止即使模塊中存在use autodie;,也會執行腳本執行。

任何人都可以對此有所瞭解嗎?你將如何對這樣的錯誤進行單元測試? (Test::Strict未檢測到缺失的use Carp;聲明)。

+8

?如果不是,你在5.10中使用哪個版本,在5.16版本中使用哪個版本?注意:來自'autodie'的更新日誌:「2.10 *修正:致命和autodie不再泄漏鯉魚功能到調用者的名字空間。」 – 2014-09-30 10:26:34

回答

3

感謝來自@註釋的i-驚動外星人,我可以很快確定原因:

在我5.10.1 perlbrew安裝autodie安裝有2.06_01版本,更新的安裝(Perl的5.16。 0)在版本2.10中使用autodie,其中一個錯誤已被修復,泄漏了Carp函數。

只是爲了記錄:要確定autodie(或任何其他模塊)的版本是否使用這兩個系統上`autodie`同一版本只需鍵入

cpan -D autodie 
+2

爲了記錄,CPAN上有一個約定,版本號中帶有下劃線的版本(例如:所引用的「2.06_01」)是開發版本,不適用於生產系統。通常,標準CPAN安裝程序腳本會跳過此類版本,除非您要求提供特定版本。 – 2014-09-30 23:44:18