如何修复perl语法错误;缺少右曲括号或方括号“;使用VIM?

如何修复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 ./

编译(或执行)带有不匹配的数组括号([])或作用域括号(“{}”)的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 ./foo.pl aborted due to compilation errors.
vi或vi改进(VIM)用户如何解决此错误消息?我添加了一个带有一些VIM增强功能的答案。请添加您自己的想法、实践或vi插件


注意:VIM版本发布的原始问题没有突出显示perl大括号和方括号。许多新版本都这样做;有关更多信息,请参阅。

使用语法高亮显示,vim几乎总是正确的,并且有一个非常复杂的perl语法高亮显示方案


:语法在

您可以使用%命令匹配vim中的大括号/方括号/圆括号。因此,请使用该选项搜索不匹配的字符。

如何立即排除此错误:

  • 在VIM中,选择一个开口{、[、或(符号)。
    %
    命令在匹配的{}、[]和()对之间跳转。不匹配将跳转到意外的位置

  • 安装、运行它,并查找异常缩进的代码块

  • 如何防止将来的错误:

  • 显示如何修改大括号/方括号的VIM大括号/方括号语法着色。(某些版本默认情况下不这样做。)

  • 键入时自动匹配[,(,{,,,”符号

  • 脚本重新格式化perl以提高可读性,这可能会暴露不匹配的符号

  • 用户说:“在VIM编辑器中使用。”

    nmap\g mt:%!perltidy't

  • 使用一致的{}匹配缩进(一般提示,不特定于此perl错误)

  • 我经常使用它来重新格式化我的代码。当我重新格式化缺少终止符的代码时,进一步的代码会奇怪地缩进,我可以快速地向上追踪以找到问题所在

    好处:我使用此映射立即重新格式化文件,并且不会丢失光标位置:

    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,}'