perl – “标准”和块包声明之间有什么区别吗?

前端之家收集整理的这篇文章主要介绍了perl – “标准”和块包声明之间有什么区别吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通常,一个包开始简单地
package Cat;
... #content
!0;

我刚刚发现,从perl 5.14开始,还有“block”语法。

package Cat {
    ... #content
}

这可能是一样的但是要确定,有什么区别吗?

关于1;在包文件的末尾。任何块的返回值作为最后一个求值表达式的值。所以我可以把1结束之前}?要求快乐,有什么区别:

package Cat {
    ... #content
    1; 
}

package Cat {
    ... #content 
}
1;

解决方法

当然有区别。第二个变体有一个块。

包声明为subs和全局变量设置当前命名空间。这是正常范围,即范围以文件或eval字符串的结尾或封闭的块结束。

NAME BLOCK语法包就是语法糖

{ package NAME;
  ...;
}

甚至编译成相同的操作码。

虽然包声明在语法上是一个语句,但这不是语义上的;它只是设置编译时属性。因此,最后一个块的最后一个语句是文件的最后一个语句,并没有区别

package Foo;
1;

package Foo {
  1;
}

WRT。最后一句话。

包BLOCK语法很有趣,主要是因为它看起来像其他语言的类Foo {},我想。由于块限制范围,这也使得使用正确的范围变量更容易。认为:

package Foo;
our $x = 1;
package main;
$::x = 42;
say $x;

输出:1,因为我们是像我的词法范围,只是宣布一个别名!这可以通过块语法来防止:

package Foo {
  our $x = 1;
}
package main {
  $::x = 42;
  say $x;
}

按预期工作(42),虽然严格不快乐。

猜你在找的Perl相关文章