加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:19:15 所属栏目:大数据 来源:网络整理
导读:通常,一个包开始简单地 package Cat;... #content!0; 我刚刚发现,从perl 5.14开始,还有“block”语法。 package Cat { ... #content} 这可能是一样的但是要确定,有什么区别吗? 关于1;在包文件的末尾。任何块的返回值作为最后一个求值表达式的值。所以我
通常,一个包开始简单地
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),虽然严格不快乐。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读