好像取決於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;
聲明)。
?如果不是,你在5.10中使用哪個版本,在5.16版本中使用哪個版本?注意:來自'autodie'的更新日誌:「2.10 *修正:致命和autodie不再泄漏鯉魚功能到調用者的名字空間。」 – 2014-09-30 10:26:34