$^H

警告:此變數僅供內部使用。其可用性、行為和內容可能會在不另行通知的情況下發生變更。

此變數包含 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。