【问题标题】:General check of missing semicolon缺少分号的一般检查
【发布时间】:2013-07-31 07:40:43
【问题描述】:

作为一个 Perl 初学者,我有时会遇到编译错误,并且必须进行大量搜索才能找到它。最后,它只是一行末尾缺少的分号。 Perl 会检查一些缺少分号的语法错误,但通常不会检查。有没有办法得到这张支票?

编辑:

我知道 Perl::Critic 但不能在 atm 使用它。而且我不知道它是否会检查缺少的分号。

【问题讨论】:

  • 这确实是你应该在编辑器中做的事情,而不是在运行时;因此,它实际上更像是一个特定于工具的问题,而不是一个特定于语言的问题。您使用什么编辑器/IDE?
  • (例如,在 Vim 中,您可以只搜索 [^;{}]$,它会突出显示所有不是大括号或分号的行尾字符。)
  • 我正在使用 vim,感谢您的提示。但是对于有据可查的长脚本,我必须搜索一段时间。因为我通常不会以 ; 结束我的 cmets
  • 为什么你有很长的、有据可查的脚本到处都缺少分号?您可以尝试使用^[^#].*[^;{}]$ 省略以注释开头的行;如果您想排除任何带有 cmets 的行并且愿意冒因其他原因而丢失其中包含 # 的行的风险,请尝试 ^[^#]*[^;{}]$
  • 我只是想问一下我的脚本是否会变长,而我认为在发表评论时没有问题。跳过评论的提示对我不起作用。

标签: perl


【解决方案1】:

因为分号在 Perl 中实际上意味着某些东西,而不仅仅是为了装饰,任何工具(甚至 Perl 解释器本身)都不可能在每种情况下都知道您是否真的打算省略分号.因此,您的问题没有一般情况的答案;你只需要检查你的代码并确保它是正确的。

正如我在 cmets 中提到的,您可以使用编辑器尝试各种技巧来加快查找可能不正确的行的过程;但是,您必须手动检查和修复这些问题,否则可能会引入新问题。

【讨论】:

  • 是的,当然你是正确的,不能有一个普遍的规则。我正在寻找一种最小化搜索的方法,您的提示真的很有帮助。
【解决方案2】:

语法检查是perl -c,但这与尝试直接运行程序没有什么不同。由于其灵活/不确定的语法,一个人通常不能做你想做的事。这是舒适和表现力的缺点。

升级到最新的稳定 Perl,解析器的错误消息在过去几年变得更好/更准确,并且可以正确识别缺少分号的许多情况。

适用于许多解析器/其他语言的经验法则:如果错误没有意义,请查看前几行。

【讨论】:

  • 是的,这个经验法则也是我所期待的,我想每个有经验的 Perl 用户都会这样做。我只需要记住这个;)
【解决方案3】:

use diagnostics; 通常会给你一个很好的提示,和use warnings; 一样。尽量保持一致的编码风格,检查perlstyle。 你也可以使用Perl::Critic online

作为一般建议,学习如何使用包和模块,尝试将代码分组到 subs 中,并研究数组、列表和哈希的语法。一个常见的错误是在匿名 hashref 分配后忘记了;

my $hashref = { a => 5, b => 10};

【讨论】:

  • 我一直在使用use strictuse warningsuse diagnostics 对我来说是新的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多