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