如何修复perl语法错误;缺少右曲括号或方括号“;使用VIM?
编译(或执行)带有不匹配的数组括号([])或作用域括号(“{}”)的perl程序会导致“缺少右花括号或方括号”语法错误。Perl通常将源代码报告为您的最后一行代码(“在EOF”),这可能与实际缺失的代码相去甚远 perl错误消息示例:如何修复perl语法错误;缺少右曲括号或方括号“;使用VIM?,perl,vim,syntax-error,Perl,Vim,Syntax Error,编译(或执行)带有不匹配的数组括号([])或作用域括号(“{}”)的perl程序会导致“缺少右花括号或方括号”语法错误。Perl通常将源代码报告为您的最后一行代码(“在EOF”),这可能与实际缺失的代码相去甚远 perl错误消息示例: Missing right curly or square bracket at ./foo.pl line 100, at end of line syntax error at ./foo.pl line 100, at EOF Execution of ./
Missing right curly or square bracket at ./foo.pl line 100, at end of line
syntax error at ./foo.pl line 100, at EOF
Execution of ./foo.pl aborted due to compilation errors.
vi或vi改进(VIM)用户如何解决此错误消息?我添加了一个带有一些VIM增强功能的答案。请添加您自己的想法、实践或vi插件
注意:VIM版本发布的原始问题没有突出显示perl大括号和方括号。许多新版本都这样做;有关更多信息,请参阅。使用语法高亮显示,vim几乎总是正确的,并且有一个非常复杂的perl语法高亮显示方案
:语法在
您可以使用%命令匹配vim中的大括号/方括号/圆括号。因此,请使用该选项搜索不匹配的字符。如何立即排除此错误:
%
命令在匹配的{}、[]和()对之间跳转。不匹配将跳转到意外的位置
nmap\g mt:%!perltidy't
nmap \g mt:%!perltidy<CR>'t
nmap\g mt:%!可能不会
听起来你可能在谈论一种教学情况,在这种情况下,教授好的缩进可以解决大多数问题
然而,有时我在一个没有vim和perltidy这样的细节的服务器上,我使用一种快速的“n”dirty技术来查找语法错误——只需在代码的不同点添加一个右大括号,直到行号发生变化,这就是您的问题所在。使用padre。单击Perl->查找不匹配的大括号。它将光标向右移动到pr问题 我来到这个页面时遇到了同样的问题。使用perltidy和vim没有任何帮助,perltidy之后的缩进看起来很好。出于某种原因,我在“sub”关键字之前有一个额外的大括号。Padre一次点击就解决了这个问题
如果您没有看到任何缺少的大括号:
如果文件在windows中创建并试图在Linux中使用,则用\r\n替换有助于解决此问题。我在一个脚本中遇到此错误,该脚本似乎有完全匹配的花括号和方括号…除了我使用了bash样式的语法,实际上注释掉了一行的后半部分(用一对花括号的后半部分) 当我更改此行时,错误消失了:
$data_len="${#insert_data}";
为此:
$data_len=length($insert_data);
使用正则表达式缩小出错代码的范围。例如使用shell
根据需要改变
90
,以限制块长度,然后再使用结束大括号。语法高亮显示如何帮助发现缺少的大括号?我想不会。语法高亮显示实际上只会使未闭合的引号变得明显。我不禁好奇:为什么要使用2003年的Vim版本?(即使是Vim的主页也建议6.4作为7.2之前的稳定版本,如果7.2出于某种原因无法使用的话。)托管这些工具的系统已经有几年没有更新或维护了。(试着想想另一个原因,但实际上并不比这更复杂。)我将在另一个系统上试用一个新版本,并更新版本注释。根据上下文,我在编辑脚本时遇到此错误,并花了一个小时左右的时间进行调试。在网上找到了一些提示,但不是完整的答案。希望这对生产和指导工作都有帮助!
$data_len="${#insert_data}";
$data_len=length($insert_data);
cat index.pl |pcregrep '[\{]{1}[\w\W^}^{]{90,}'