【问题标题】:Perl: Adding semicolon (;) when block endsPerl:在块结束时添加分号(;)
【发布时间】:2014-07-17 11:47:11
【问题描述】:

这个问题可能听起来很愚蠢,但对我来说重要的是要 100% 确定我做的事情是正确的,所以我决定在这里问这个问题。

我在别人的代码中遇到过 if 语句,它们的块以分号 (;) 结尾。

我猜这些分号没有任何作用,但我想完全确定。

那你能告诉我吗?下面的代码sn-ps有什么区别吗?

带分号:

if ($var) {
    print "hi\n";
};

没有分号:

if ($var) {
    print "hi\n";
}

谢谢!

【问题讨论】:

    标签: perl block


    【解决方案1】:

    如果没有else 块,它们是完全等价的。对于 else 块,不允许使用分号。

    【讨论】:

    • 那么块末尾的分号在 Perl 中永远不会有任何影响?
    • 分号不是块的一部分。它是以下语句的一部分(这是一个空语句,在您的情况下仅包含分号本身)。所以它不会影响块。请注意,{ 在 Perl 中具有多种含义,而在 do { ... };' and eval { ... };' 中具有不同的含义。在这些情况下,块是表达式的一部分,分号终止表达式。另一个例子:my $x = eval { 5 } + 6;。这个例子表明块和分号是不相关的。
    • 这取决于块的类型。在do { ... };eval { ... }; 之后需要分号,因为它们是语句。
    • @friedo:它们不是语句:它们只是可以成为表达式一部分的术语。只有当它们是语句中的最后一个(或唯一)术语时,它们才需要后面的分号。如果你有print do { 6 * 7 } * 2;,那么在语句结束之前不需要分号,即使它不是块或文件中的最后一个语句。
    • @Borodin doeval 块本身就是一个表达式和一个语句。显然,表达式可以组合成更大的语句。我以为我的意思很清楚,但我想不是。 :)
    【解决方案2】:
    if ($var) { print "hi\n"; };
    

    if ($var) { print "hi\n" }
    

    作为

    print "hi\n";;
    

    print "hi\n";
    

    你有两个语句,后者是空的。空语句什么都不做。

    $ perl -e'print "hi\n";;;;;;;;;;;;;'
    hi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2020-11-18
      相关资源
      最近更新 更多