警告:此變數僅供內部使用。其可用性、行為和內容可能會在不另行通知的情況下發生變更。
此變數包含 Perl 解譯器的編譯時提示。在編譯 BLOCK 結束時,此變數的值會還原為解譯器開始編譯 BLOCK 時的值。
每次陳述式完成編譯時,$^H
的目前值會與該陳述式一起儲存,並可以在稍後透過 (caller($level))[8]
擷取。請參閱 perlfunc 中的「caller EXPR」。
當 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 { require strict; strict->import('vars') }
取代 BEGIN { add_100() }
區塊,展示了如何實作 use strict 'vars'
。以下是相同詞法實用指令的條件式版本
BEGIN {
require strict; strict->import('vars') if $condition
}
此變數新增於 Perl 5.003。