perl-5.22.1
$^H

WARNING: This variable is strictly for internal use only. Its availability, behavior, and contents are subject to change without notice.

警告: この変数は厳密に内部使用に限定されます。 その可用性、挙動、内容は告知なく変更される可能性があります。

This variable contains compile-time hints for the Perl interpreter. At the end of compilation of a BLOCK the value of this variable is restored to the value when the interpreter started to compile the BLOCK.

この変数には Perl インタプリタのコンパイル時のヒントが入ります。 BLOCK のコンパイル終了時に、この変数の値は インタプリタが BLOCK のコンパイルを開始した時の値に戻されます。

When perl begins to parse any block construct that provides a lexical scope (e.g., eval body, required file, subroutine body, loop body, or conditional block), the existing value of $^H is saved, but its value is left unchanged. When the compilation of the block is completed, it regains the saved value. Between the points where its value is saved and restored, code that executes within BEGIN blocks is free to change the value of $^H.

Perl がレキシカルスコープを持つブロック構造(eval の中身、required された ファイル、サブルーチンの中身、loop の中身、条件付きブロック)の パースを開始するとき、現在の $^H の値は保存されますが、値は 変更されません。 ブロックのコンパイルが終わると、保存された値が戻されます。 値の保存と回復の間の地点で、BEGIN ブロックの中で実行されるコードは自由に $^H の値を変更できます。

This behavior provides the semantic of lexical scoping, and is used in, for instance, the use strict pragma.

この振る舞いはレキシカルスコープを持ち、その中で使えます; 例としては use strict があります。

The contents should be an integer; different bits of it are used for different pragmatic flags. Here's an example:

内容は整数であるべきです; ビット毎に異なるプラグマフラグとして使われます。 以下は例です:

    sub add_100 { $^H |= 0x100 }

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

Consider what happens during execution of the BEGIN block. At this point the BEGIN block has already been compiled, but the body of foo() is still being compiled. The new value of $^H will therefore be visible only while the body of foo() is being compiled.

BEGIN ブロックの実行中に起こることを考えてみます。 この時点で BEGIN ブロックは既にコンパイルされていますが、 foo() の中身はまだコンパイル中です。 従って $^H の新しい値は foo() の中身がコンパイル中にのみ 見ることが出来ます。

Substitution of BEGIN { add_100() } block with:

BEGIN { add_100() } ブロックを以下のように変更すると:

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

demonstrates how use strict 'vars' is implemented. Here's a conditional version of the same lexical pragma:

どのように use strict 'vars' が実装されているかがわかります。 以下は同じレキシカルプラグマの条件付き版です:

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

This variable was added in Perl 5.003.

この変数は Perl 5.003 で追加されました。