Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl的Autodie愚人语法检查_Perl - Fatal编程技术网

perl的Autodie愚人语法检查

perl的Autodie愚人语法检查,perl,Perl,似乎根据perl的版本,autodie掩盖了一些语法错误 在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 pre

似乎根据perl的版本,autodie掩盖了一些语法错误

在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为:

令人困惑的是,在某些服务器上(例如CentOS 6.5、perl 5.10.1),没有使用Carp停止脚本执行,即使
使用autodie出现在模块中


有人能解释一下吗?您将如何针对此类错误进行单元测试?(未检测到丢失的
use Carp;
语句)。

感谢@i-alarmed-alien的评论,我可以快速确定原因:

在我的5.10.1 perlbrew安装中,autodie安装在版本2.06_01中,较新的安装(perl 5.16.0)在版本2.10中使用autodie,在版本2.10中修复了一个bug,从而泄漏了Carp功能

仅用于记录:要确定autodie(或任何其他模块)的版本,只需键入

cpan -D autodie

您是否在两个系统上使用相同版本的
autodie
?如果没有,您在5.10中使用的是哪个版本,在5.16中使用的是哪个版本?注意:来自
autodie的changelog
:“2.10*错误修复:Fatal和autodie不再将Carp函数泄漏到调用方的命名空间中。”作为记录,CPAN上有一个约定,版本号中带有下划线的版本(例如:您引用的“2.06_01”)是开发版本,不用于生产系统。通常,标准CPAN安装程序脚本会跳过此类版本,除非您要求特定版本。
cpan -D autodie