gpt4 book ai didi

Perl - BEGIN 非 BEGIN block 的差异

转载 作者:行者123 更新时间:2023-12-01 08:36:00 26 4
gpt4 key购买 nike

我对 perl 中的 const 声明有疑问,并且无法弄清楚差异,请指出有什么不同。

下面是代码:

BEGIN {
*SIZE = sub() { 2 };
}
*ITEM = sub() { 10 };

print 'size=', SIZE, "\n";
print 'item=', &ITEM, "\n";

现在的问题是, 为什么

  print 'item=', &ITEM, "\n";

行必须在 ITEM 前面有一个 '&', 但是

  print 'size=', SIZE, "\n";   

行不需要在 SIZE 前面有一个 '&'。

而且我知道 BEGIN block 是在编译时运行的。

最佳答案

因为 BEGIN block 是在编译时运行的,所以编译器知道对 *SIZE 的赋值,而对 *ITEM 的赋值尚未发生。

因为编译器不知道*ITEM,所以对ITEM的调用是不明确的,因此你必须在它前面加上一个&。否则,编译器会认为它可能是一个“裸词”——一个未加引号的字符串。

如果你 use strict ,编译将假定裸词是函数。

use constant也可能是声明常量的更好方法,而不是手动进行。

关于Perl - BEGIN 非 BEGIN block 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10349702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com