我遇到了Perl代码中的错误,这些错误在与错误无关的地方报告.我删除了数小时后修复了一个这样的错误,并逐行重新添加代码然后做了一些试验和错误.下面详述了两个这样的错误.我的问题是:如果将来发生这些问题,有没有办法确保perl编译器帮助我解决这个问题,或者我是否必须用其他语言重写代码.(我正在考虑Java).
use switch;
use strict;
use warnings;
...other modules;
sub log{
}
..various sub routines
switch {$val1)
{
log(..) #first invocation of log
case ($val2)
...
}
Run Code Online (Sandbox Code Playgroud)
{
$val3 = POSIX::floor($val2/$val4)*$val4;
$val5="/x/y/$logfilename";
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说case语句有错误.如果我移动行$ val5 ="/ x/y/$ logfilename"; 在$ val3之前,没有错误.或者,如果我删除$ val5中的'/',即$ val5 ="x",则没有错误或者如果我说$ val5 = qq(/ x/y/$ logfilename); 没有错误.这次我认为自己很幸运,因为我找到了一个解决方法,但这只是在经过3个小时的斗争之后.有没有办法让perl编译器准确报告错误?
我还有一个类似的案例要报告,如果有必要可以添加.请求输入
忽略帖子的问题,您可能遇到的问题是switchperl 中的功能是使用源过滤器实现的.这基本上意味着对源代码进行预处理,以便在编译之前将看起来像开关案例结构的内容转换为有效的perl代码.Perl的解析器通常在复杂结构上得到一些错误的行号,但是当涉及源过滤器时,所有的投注都是关闭的.这是Switch现代版Perl中已弃用的原因之一.
解决方案是停止使用switch,并使用Perl的其他控制结构,或者使用足够新的perl版本来支持given/when构造(5.10 +),这是现代Perl版本的switch/case.