【问题标题】:Perl does not complain about missing semicolonPerl 不会抱怨缺少分号
【发布时间】:2013-05-03 17:13:12
【问题描述】:

我刚刚在我的 Ubuntu 上发现 Perl 并没有抱怨最后的分号。检查以下代码:

#!/usr/bin/perl
use warnings;
use strict;

my @array = (1, 2, 3, 4);

foreach (@array)
{
    print $_."\n"
}

print "no, this cant be true"

请注意分号“;”打印语句中缺少。代码仍然运行良好。

输出:

1
2
3
4
no, this cant be true

如果我在打印后加上分号,它仍然有效。所以这让我很困惑。

您能否帮助我了解我在这里遗漏了什么,或者是否有一些明显的 Perl 意识形态被我忽略了?

【问题讨论】:

  • 它也不会抱怨“额外的”分号。 “额外”和“缺失”逗号也是如此。
  • 这在单行 eval 块中实际上非常方便。考虑说“eval {$some->method};”诗句说“eval {$some->method;};”。

标签: perl semantics


【解决方案1】:

来自perldoc perlsyn

每个简单语句都必须以分号结尾,除非它是块中的最后一条语句,在这种情况下分号是可选的。

您的打印语句是块中的最后一条语句。

但不建议省略分号。以后扩展块太容易忘记添加了。

【讨论】:

  • 确实,它就像 Pascal,而不是 C。
【解决方案2】:

我经常将 Perl 中的分号视为分隔符而不是终止符 - 这使得这种行为更容易习惯。

也就是说,始终使用分号并不是一个坏主意,因为如果您在块的末尾添加更多语句,您不必记得稍后添加它,有点像在一个列表,以便您以后不要忘记添加它(如果后面没有列表项,Perl 会忽略最后一个逗号)。

【讨论】:

    【解决方案3】:

    来自Perl documentation

    每个简单的语句都必须以分号结束,除非它 是块中的最后一条语句,在这种情况下,分号是 可选。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2015-10-31
      • 2018-06-25
      • 1970-01-01
      • 2021-11-30
      • 2015-03-13
      相关资源
      最近更新 更多