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),虽然严格不快乐。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |