$^H

警告:此变量仅供内部使用。其可用性、行为和内容可能会在未经通知的情况下更改。

此变量包含 Perl 解释器的编译时提示。在 BLOCK 编译完成后,此变量的值将恢复到解释器开始编译 BLOCK 时的值。

每次语句完成编译时,$^H 的当前值都会与该语句一起存储,并且稍后可以通过 (caller($level))[8] 检索。请参阅 "caller EXPR" in perlfunc

当 perl 开始解析任何提供词法作用域的块结构(例如,eval 主体、所需文件、子程序主体、循环主体或条件块)时,会保存 $^H 的现有值,但其值保持不变。当块的编译完成时,它会恢复保存的值。在保存和恢复其值之间,在 BEGIN 块中执行的代码可以自由更改 $^H 的值。

此行为提供了词法作用域的语义,并且在例如 use strict 编译指示中使用。

内容应该是一个整数;它的不同位用于不同的语义标志。以下是一个例子

sub add_100 { $^H |= 0x100 }

sub foo {
    BEGIN { add_100() }
    bar->baz($boon);
}

考虑在执行 BEGIN 块期间发生的情况。此时,BEGIN 块已经编译完成,但 foo() 的主体仍在编译中。因此,$^H 的新值只在编译 foo() 的主体时可见。

用以下代码替换 BEGIN { add_100() }

BEGIN { require strict; strict->import('vars') }

演示了 use strict 'vars' 的实现方式。以下是相同词法语义的条件版本

BEGIN {
    require strict; strict->import('vars') if $condition
}

此变量是在 Perl 5.003 中添加的。