警告:此变量仅供内部使用。其可用性、行为和内容可能会在未经通知的情况下更改。
此变量包含 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 中添加的。